SQL合并查询 - 执行附加查询

时间:2011-09-26 19:50:23

标签: tsql sql-server-2008 sql-server-2008-r2

我编写了一个有效的T-SQL MERGE语句。前提是数据库A包含有关客户支持呼叫的记录。如果他们要返回产品进行维修,则数据库B将填充数据库A中的某些数据元素(例如客户名称,地址,产品ID,序列号等)。因此,我将运行执行SSIS的SQL Server作业每半小时左右包装一次,其中MERGE将执行以下操作之一:

  
      
  1. 如果数据库A中的支持呼叫需要产品返回并且它   不在数据库B中,将其插入数据库B ..
  2.   
  3. 如果数据库A中的支持呼叫需要产品返回并且它   在数据库B中 - 但数据已更改 - 在数据库B中更新它。
  4.   
  5. 如果数据库B中有产品退货但不再存在   表示为数据库A中的产品退货(是的,这可能发生 - 客户可以在以后的时间/日期改变主意而不想为替换产品付款),从数据库中删除它   乙
  6.   

我的问题是,数据库B有一个额外的表,其中包含1到多个FK关系,表格在MERGE中填充。我不知道如何,或者甚至是否可以使用MERGE语句首先删除具有FK约束的表中的记录,然后删除我在MERGE语句中正在执行的记录。

显然,一种方法是在MERGE中删除DELETE并在临时表中删除写入要删除的ID,然后从FK表中删除,然后删除PK表。但是如果我能以某种方式从WHEN NOT MATCHED BY SOURCE中的两个表中删除那些更干净的代码。可以这样做吗?

1 个答案:

答案 0 :(得分:4)

每个查询只允许UPDATEDELETEINSERT进出一个表。

但是,如果您向ON DELETE CASCADE关系添加了FK,则当您从主表中删除时,子表将被清除,并且它将在单个操作中处理。 / p>