Tim*_*ter 7 sql t-sql sql-server-2005 constraints foreign-key-relationship
在SQL-Server中处理自引用外键约束的推荐方法是什么?
表 - 型号:
fiData
引用tabData中的上一条记录.如果我删除引用的记录,则fiData
数据库会引发异常:
"DELETE语句与SAME TABLE REFERENCE约束冲突"FK_tabDataPrev_tabDataNext".冲突发生在数据库"MyDataBase",表"dbo.tabData",列'fiData'"
如果Enforce Foreignkey Constraint
设置为"是".
我不需要级联删除被引用的记录,但我需要设置fiData=NULL
它被引用的位置.我的想法是设置Enforce Foreignkey Constraint
为"No"并创建一个删除触发器.这是值得推荐还是有更好的方法?
谢谢.
与Andomar不同,我很乐意使用触发器 - 但我不会删除约束检查.如果将其实现为instead of
触发器,则可以在执行实际删除之前将其他行重置为null:
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)
Run Code Online (Sandbox Code Playgroud)
它的短,它的简洁,它不会是必要的,如果的SQL Server可以处理外键级联到同一个表(在其他RDBMS",你可以只指定ON DELETE SET NULL
为外键约束,情况因人而异).
归档时间: |
|
查看次数: |
12040 次 |
最近记录: |