表中的一行被错误地覆盖了。我有一个表的备份,需要使用备份数据更新主表中的单行。问题是该表有近100列。有没有一种简单的方法在SQL Server中执行此操作,因此我不必手动写出:
set maintable.a = backuptable.a,
maintable.b = backuptable.b,......etc.
一直到第100列。我认为SQL Server Management Studio可以知道我想要更新另一个表中具有相同命名字段的字段。有没有办法做到这一点?
提前致谢。
答案 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