根据具有名称列名称的另一个表,更新表中100列行的SQL

时间:2011-08-12 14:48:17

标签: sql sql-server sql-update

表中的一行被错误地覆盖了。我有一个表的备份,需要使用备份数据更新主表中的单行。问题是该表有近100列。有没有一种简单的方法在SQL Server中执行此操作,因此我不必手动写出:

set maintable.a = backuptable.a, 
    maintable.b = backuptable.b,......etc.

一直到第100列。我认为SQL Server Management Studio可以知道我想要更新另一个表中具有相同命名字段的字段。有没有办法做到这一点?

提前致谢。

3 个答案:

答案 0 :(得分:5)

INSERT INTO MainTable
SELECT *
FROM BackUpTable
WHERE RowID = GoodRow

DELETE FROM MainTable
WHERE RowId = BadRow

只需插入“好”行并删除“坏”行。

如果存在PK约束,您可以按相反的顺序删除/插入。

将其括在TRANSACTION

中也是明智之举

答案 1 :(得分:1)

在SSMS中,您可以将对象资源管理器中的columns节点拖放到“查询”窗口。它将生成所有列的逗号分隔字符串。

答案 2 :(得分:0)

> declare @aa varchar (max) set @aa = ''
> 
> select  @aa = 
>     (case when @aa = ''
>     then column_name
>     else @aa + coalesce(', ' + column_name+'= '+column_name, '')
>     end) from amicus.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'People' print @aa