如果不存在则插入然后更新 - n列数更新语句简化

时间:2011-05-16 13:04:22

标签: sql-server-2008 merge insert

此问题是现有问题here的延续。

我需要在同一个实例上的两个数据库中比较两个相似的表,如果记录存在则更新数据,如果不存在则更新。我计划使用合并作为上述问题的答案。

但我想知道是否有任何简单的解决方案可以使用其他表更新整个表,而无需在UPDATE查询中写入SET语句中的所有列。

我的意思是我不想写SET t1.col1 = t2.col2,t1.col2 = t2.col2等等。

2 个答案:

答案 0 :(得分:1)

除了动态创建查询并动态执行它之外,没有简单的方法可以做到这一点,这两种方式都是纯粹的邪恶。

答案 1 :(得分:1)

YourTableName名称替换为您的表名称,将结果复制到合并语句并删除最后一个逗号。

declare @S varchar(max)
set @S = 'SET '

select @S = @S + 'T1.'+name+'=T2.'+name+', '
from sys.columns
where object_name(object_id) = 'YourTableName'
order by column_id

select @S