我有两张表。这些表之间有两个关系。
Table 1 * ID_XPTO (PK) * Detail Table 2 * ID_XPTO (FK) (PK) * ID_XPTO2 (FK) (PK)
这两个关系存在。
Table 1 -< Table2 Table 1 -< Table2
我的问题是我需要删除表1中的某些行。
declare @table Table (xptoTable2 int) insert into @table select ID_XPTO2 from Table2 where ID_XPTO = @ID_XPTO delete from Table2 where ID_XPTO = @ID_XPTO delete from Table where ID_XPTO in (select xptoTable2from @table)
我知道我可以在table2上使用ON DELETE SET NULL。这样,我就可以在ID_XPTO2上搜索所有具有空值的行并将其删除,但是DBA不想使用它。
是否有一些更好的解决方案来执行此过程?
您有以下选择:
与现在一样,在两个语句中删除。首先从表2中删除。
如果您的品牌数据库支持多表DELETE语法(例如MySQL),请在一条语句中从两个表中删除。这不是标准的SQL,但是很方便。
DELETE
使用级联参照完整性约束(我知道您的DBA已经取消了此选项)。
BEFORE DELETE在表1上编写触发器,以删除表2中的任何引用或将其设置为NULL。请咨询您的DBA,以了解是否比级联的RI约束更可接受。
BEFORE DELETE
最后,我建议您咨询您的DBA,并询问与您在此处提出的相同问题。找出他/她希望您使用的解决方案。StackOverflow上的人们可以回答技术问题,但是听起来您正在处理 IT策略问题 。