admin

从两个表中删除行

sql

我有两张表。这些表之间有两个关系。

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不想使用它。

是否有一些更好的解决方案来执行此过程?


阅读 210

收藏
2021-07-01

共1个答案

admin

您有以下选择:

  • 与现在一样,在两个语句中删除。首先从表2中删除。

  • 如果您的品牌数据库支持多表DELETE语法(例如MySQL),请在一条语句中从两个表中删除。这不是标准的SQL,但是很方便。

  • 使用级联参照完整性约束(我知道您的DBA已经取消了此选项)。

  • BEFORE DELETE在表1上编写触发器,以删除表2中的任何引用或将其设置为NULL。请咨询您的DBA,以了解是否比级联的RI约束更可接受。

最后,我建议您咨询您的DBA,并询问与您在此处提出的相同问题。找出他/她希望您使用的解决方案。StackOverflow上的人们可以回答技术问题,但是听起来您正在处理
IT策略问题

2021-07-01