MS SQL - 条件更新 return 结果
MS SQL - Conditional UPDATE return result
我有一个存储过程正在执行以下操作。
已填充的目标 table 数据会根据几个相似的源 table 进行匹配检查(基于名称和地址数据)。如果在第一个 table 中找到匹配项,那么它会用一个标志更新目标,该标志标识匹配项来自哪个来源 table 。但是,如果它找不到匹配项,我需要它查看下一个来源 table 和下一个来源,直到找到匹配项或未找到匹配项为止。
UPDATE 语句是否有一种简单的方法来提供某种 return 值,我可以查询它是否更新了目标 table?我想使用这个 return 值,这样我就可以跳过不必要地检查后续源 table。
否则我是否必须执行条件更新然后执行单独的查询以确定更新是否实际更新了标志?
可能最安全的方法是使用 OUTPUT
clause。这会将 return 修改后的行放入新的 table.
您可以检查 table 以查看是否有任何行已更新。
OUTPUT
子句的一个优点是您可以同时更新多行。
我喜欢 Gordon 的解决方案,但我认为您实际上不需要它。
只需运行按顺序更新:
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)
...
等等。
您不需要有条件地检查每一行,那样会很慢。
您可以将更新放入 try/catch 并将结果插入另一个 table
我有一个存储过程正在执行以下操作。
已填充的目标 table 数据会根据几个相似的源 table 进行匹配检查(基于名称和地址数据)。如果在第一个 table 中找到匹配项,那么它会用一个标志更新目标,该标志标识匹配项来自哪个来源 table 。但是,如果它找不到匹配项,我需要它查看下一个来源 table 和下一个来源,直到找到匹配项或未找到匹配项为止。
UPDATE 语句是否有一种简单的方法来提供某种 return 值,我可以查询它是否更新了目标 table?我想使用这个 return 值,这样我就可以跳过不必要地检查后续源 table。
否则我是否必须执行条件更新然后执行单独的查询以确定更新是否实际更新了标志?
可能最安全的方法是使用 OUTPUT
clause。这会将 return 修改后的行放入新的 table.
您可以检查 table 以查看是否有任何行已更新。
OUTPUT
子句的一个优点是您可以同时更新多行。
我喜欢 Gordon 的解决方案,但我认为您实际上不需要它。
只需运行按顺序更新:
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)
... 等等。 您不需要有条件地检查每一行,那样会很慢。
您可以将更新放入 try/catch 并将结果插入另一个 table