MS SQL - 条件UPDATE返回结果

时间:2016-10-24 11:39:05

标签: sql sql-server conditional return-value

我有一个存储过程正在执行以下操作。

针对匹配的几个类似的源表(基于名称和地址数据)检查填充的目标表数据。如果在第一个表中找到匹配,则它使用标记来更新目标,该标志标识匹配来自哪个源表。但是,如果它没有找到匹配项,我需要它查看下一个源表和下一个源表,直到找到匹配项或不符合具体情况。

是否有一种简单的方法可以让UPDATE语句提供某种返回值,我可以查询它是否更新了目标表?我想使用此返回值,以便我可以不必要地跳过检查后续源表。

否则我将不得不执行条件UPDATE,然后执行单独的查询以确定UPDATE是否实际更新了标志?

3 个答案:

答案 0 :(得分:2)

可能最安全的方法是使用OUTPUT clause。这会将修改后的行返回到新表中。

您可以查看表格以查看是否有任何行已更新。

OUTPUT子句的一个优点是您可以同时更新多行。

答案 1 :(得分:0)

我喜欢戈登的洗礼,但我认为你不需要它。

只需按顺序运行更新:

UPDATE BASE_TABLE
SET FLAG='first_table'
where FLAG IS null AND
EXIST (SELECT 1 FROM first_table f1 where f1.ID = ID)

UPDATE BASE_TABLE
SET FLAG='second_table'
where FLAG IS null AND
EXIST (SELECT 1 FROM second_table f2 where f2.ID = ID)

... 等等。 你不需要检查每一行条件,这将非常慢。

答案 2 :(得分:0)

您可以将更新放入try / catch并将结果插入另一个表