sql-server - 从SQL中的多个表中级联删除行
问题描述
我有3个这样的表:
- 表 1:ID、名称
- 表 2:ID、名称
- 表 3:Id、EntityName (nvarchar)、EntityId (int)
Table3 上没有外键。我将 Table1 和 Table2 的行插入到 Table3 中,如下所示:
ID | 实体名称 | 实体 ID | 其他列 |
---|---|---|---|
1 | 表格1 | 1 | ... |
2 | 表2 | 1 | ... |
3 | 表2 | 2 | ... |
当我从 Table1 或 Table2 中删除一行时,如何将它从 Table3 中级联?
解决方案
您可以在每个表上创建一个delete trigger
以从 table3 中删除匹配的行,例如:
create trigger Table1Delete on dbo.table1
for delete
as
if @@RowCount = 0 return
set nocount on
delete from t3
from deleted d
join table3 t3 on t3.EntityName='Table1' and d.Id=t3.EntityId
还有一个类似的Table2