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

Tự tham chiếu các ràng buộc khóa ngoại và xóa

Không giống như Andomar, tôi rất vui khi sử dụng một trình kích hoạt - nhưng tôi sẽ không loại bỏ việc kiểm tra ràng buộc. Nếu bạn triển khai nó dưới dạng instead of kích hoạt, bạn có thể đặt lại các hàng khác thành null trước khi thực hiện xóa thực sự:

CREATE TRIGGER T_tabData_D
on tabData
instead of delete
as
    set nocount on
    update tabData set fiData = null where fiData in (select idData from deleted)
    delete from tabData where idData in (select idData from deleted)

Nó ngắn gọn, súc tích, sẽ không cần thiết nếu SQL Server có thể xử lý các tầng khóa ngoại vào cùng một bảng (trong RDBMS khác ', bạn có thể chỉ cần chỉ định ON DELETE SET NULL cho ràng buộc khóa ngoại, YMMV).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SqlParameter đã được chứa bởi một SqlParameterCollection khác - Việc sử dụng () {} có gian lận không?

  2. Tên chính xác cho một bảng kết hợp (mối quan hệ nhiều-nhiều)

  3. SQL Server trả về số tuần không mong muốn

  4. SQL, Làm thế nào để kết hợp các kết quả?

  5. Thủ tục đã lưu trữ trả về nhiều tập kết quả