Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để làm cho các ràng buộc khóa ngoại đáng tin cậy?

Dựa trên các ví dụ của bạn, tôi cũng đã thử:

  • Thả và tạo lại khóa ngoại.
  • Thả và tạo lại bảng.

Sau đó, tôi nhận thấy điều gì đó trong lệnh:

NOT FOR REPLICATION

Có vẻ như nếu một ràng buộc được tạo với NOT FOR REPLICATION, thì nó luôn không được tin cậy.

Trích dẫn từ Sách Trực tuyến :

Có vẻ như IS_NOT_TRUSTED cài đặt chỉ phù hợp để sao chép bị ảnh hưởng bởi IS_NOT_FOR_REPLICATION . Tôi đoán miễn là ràng buộc được thực thi trên máy chủ mà bạn đang làm việc, nó sẽ ổn thôi. Vì vậy, tôi đã tiếp tục và xác nhận nó:

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.

Nếu bạn vẫn muốn xem IS_NOT_TRUSTED = 0 để yên tâm, chỉ cần tạo lại khóa ngoại mà không cần NOT FOR REPLICATION .

Trong trường hợp nếu những người trong số các bạn đang thắc mắc, tôi cũng đã xác minh tác dụng tương tự đối với các ràng buộc KIỂM TRA.




  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 - Xóa tất cả các ký tự ASCII không in được

  2. Làm thế nào để thực hiện một GROUP BY phân biệt chữ hoa chữ thường?

  3. Tách các giá trị được phân tách trong một cột SQL thành nhiều hàng

  4. Các phương pháp phân trang của SQL Server 2008?

  5. Cách sử dụng FILEGROUPPROPERTY () trong SQL Server