如本文所示更新另一个表中的所有列?
我需要使用另一个表中的值更新一个包含 50 列的表,然后从另一个表(包含 50 列)插入新记录。我真的不想列出 50 个名称-值对(或者使用这里的批量更新语法Bulk update of all columns,无论如何 SQL Server 似乎都不喜欢这种语法)。
因此,我可以得出以下结论之一:
除非我在这里错过了一些东西——我可能错过了——我认为这相当简单。
本质上,这里唯一的问题是您不想键入所有列名称 - 这可以通过使用 sys 表的一些动态 SQL 轻松实现自动化,如 Randolph West 所暗示的那样。
就像是
select @Sql = COALESCE(@Sql + ', ', '') + COLUMN_NAME
from
INFORMATION_SCHEMA.COLUMNS
where
TABLE_NAME='Table'
Run Code Online (Sandbox Code Playgroud)
这将列出所有用逗号分隔的列,就像您键入它们准备插入/更新(或选择)一样。
这篇文章:在插入查询中动态选择列名是一个堆栈溢出问题,详细介绍。
编辑:
只是为了清楚起见我会添加一些评论:-
任何内容都可以添加到 @Sql 'building' 位,例如,如果您希望将表名放在列名之前,则选择部分将为:
select @Sql = COALESCE(@Sql + ', ', '') + TABLE_NAME + '.' + COLUMN_NAME
Run Code Online (Sandbox Code Playgroud)
您可以使用执行该变量
sp_executesql @Sql
Run Code Online (Sandbox Code Playgroud)
要不就
SELECT @Sql
Run Code Online (Sandbox Code Playgroud)
在查询执行窗口中将其提供给您,您可以复制并粘贴并运行(我通常会这样做 - 您可以先仔细检查代码,然后根据需要进行编辑)
归档时间: |
|
查看次数: |
8389 次 |
最近记录: |