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).