Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara membuat batasan kunci asing tepercaya?

Berdasarkan contoh Anda, saya juga telah mencoba:

  • Lepaskan dan buat ulang kunci asing.
  • Lepaskan dan buat ulang tabel.

Kemudian saya melihat sesuatu dalam perintah:

NOT FOR REPLICATION

Tampaknya jika kendala dibuat dengan NOT FOR REPLICATION, selalu tidak dipercaya.

Mengutip dari Buku Online :

Sepertinya IS_NOT_TRUSTED pengaturan hanya relevan untuk replikasi dipengaruhi oleh IS_NOT_FOR_REPLICATION . Saya kira selama batasan diberlakukan di server tempat Anda bekerja, itu akan baik-baik saja. Jadi saya melanjutkan dan mengonfirmasinya:

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.

Jika Anda masih ingin melihat IS_NOT_TRUSTED = 0 untuk ketenangan pikiran, cukup buat ulang kunci asing tanpa NOT FOR REPLICATION .

Jika Anda bertanya-tanya, saya telah memverifikasi efek yang sama pada batasan CHECK juga.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Periksa apakah Tabel Direferensikan oleh Kunci Asing di SQL Server dengan OBJECTPROPERTY()

  2. Menonaktifkan batasan kunci asing, masih tidak dapat memotong tabel? (SQLServer 2005)

  3. Front-end MS-Access tidak mengenali tanggal dari SQL Server

  4. Cara menghapus baris dalam tabel yang berisi kunci asing ke tabel lain

  5. Hapus data dari tabel dependen