Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да направя ограниченията на външния ключ надеждни?

Въз основа на вашите примери аз също опитах:

  • Премахнете и създайте отново външния ключ.
  • Премахнете и създайте отново таблицата.

Тогава забелязах нещо в командата:

NOT FOR REPLICATION

Изглежда, че ако ограничение е създадено с NOT FOR REPLICATION, то винаги няма доверие.

Цитирам от Книги онлайн :

Изглежда като IS_NOT_TRUSTED настройката е подходяща само за репликация повлиян от IS_NOT_FOR_REPLICATION . Предполагам, че докато ограничението е наложено на сървъра, на който работите, трябва да е наред. Така че продължих и го потвърдих:

SELECT name, is_disabled, is_not_trusted
FROM sys.foreign_keys
WHERE name = 'FK_Product_ProductKeyId'

name                    is_disabled is_not_trusted
FK_Product_ProductKeyId 0            1

INSERT INTO dbo.Sale VALUES (2, GETDATE(), 1.00)

Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Product_ProductKeyId". The conflict occurred in database "_Scratch", table "dbo.Product", column 'ProductKeyId'.
The statement has been terminated.

Ако все още искате да видите IS_NOT_TRUSTED = 0 за спокойствие, просто създайте външния ключ без NOT FOR REPLICATION .

В случай, че тези от вас се чудят, проверих същия ефект и върху ограниченията CHECK.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Подобрения на групата за наличност

  2. SQL - Обединяване на таблици, където една от колоните е списък

  3. Използвайте функцията за преобразуване на sql сървър, за да преобразувате хиджри в григорианска дата

  4. Пакетът SSIS дава грешка след внедряване на SQL Server 2012

  5. Как мога да извикам SQL функция в C#?