我编写了一个有效的T-SQL MERGE语句。前提是数据库A包含有关客户支持呼叫的记录。如果他们要返回产品进行维修,则数据库B将填充数据库A中的某些数据元素(例如客户名称,地址,产品ID,序列号等)。因此,我将运行执行SSIS的SQL Server作业每半小时左右包装一次,其中MERGE将执行以下操作之一:
- 如果数据库A中的支持呼叫需要产品返回并且它 不在数据库B中,将其插入数据库B ..
- 如果数据库A中的支持呼叫需要产品返回并且它 在数据库B中 - 但数据已更改 - 在数据库B中更新它。
- 如果数据库B中有产品退货但不再存在 表示为数据库A中的产品退货(是的,这可能发生 - 客户可以在以后的时间/日期改变主意而不想为替换产品付款),从数据库中删除它 乙
醇>
我的问题是,数据库B有一个额外的表,其中包含1到多个FK关系,表格在MERGE中填充。我不知道如何,或者甚至是否可以使用MERGE语句首先删除具有FK约束的表中的记录,然后删除我在MERGE语句中正在执行的记录。
显然,一种方法是在MERGE中删除DELETE并在临时表中删除写入要删除的ID,然后从FK表中删除,然后删除PK表。但是如果我能以某种方式从WHEN NOT MATCHED BY SOURCE
中的两个表中删除那些更干净的代码。可以这样做吗?
答案 0 :(得分:4)
每个查询只允许UPDATE
,DELETE
或INSERT
进出一个表。
但是,如果您向ON DELETE CASCADE
关系添加了FK
,则当您从主表中删除时,子表将被清除,并且它将在单个操作中处理。 / p>