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

Thêm Ràng buộc SQL XOR giữa hai FK có thể vô hiệu hóa

Một cách để đạt được điều đó là chỉ cần viết ra "độc quyền HOẶC" thực sự có nghĩa là gì:

CHECK (
    (FK1 IS NOT NULL AND FK2 IS NULL)
    OR (FK1 IS NULL AND FK2 IS NOT NULL)
)

Tuy nhiên, nếu bạn có nhiều FK, phương pháp trên có thể nhanh chóng trở nên khó sử dụng, trong trường hợp đó, bạn có thể làm như sau:

CHECK (
    1 = (
        (CASE WHEN FK1 IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN FK2 IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN FK3 IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN FK4 IS NULL THEN 0 ELSE 1 END)
        ...
    )
)

BTW, có những cách sử dụng hợp pháp cho mẫu đó, ví dụ: cái này (mặc dù không áp dụng cho MS SQL Server do thiếu các ràng buộc hoãn lại). Liệu nó có hợp pháp trong trường hợp cụ thể của bạn hay không, tôi không thể đánh giá dựa trên thông tin bạn đã cung cấp cho đến nay.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn đệ quy với CTE - SUM của các cột con cho một phụ huynh nhất định

  2. Cập nhật giá trị cột từ bảng SQL khác

  3. SQL - Truy xuất dữ liệu theo chiều dọc trang

  4. Cách tìm tên máy chủ cho SQL Server 2005

  5. Ẩn phiên bản SQL Server trên toàn mạng