不确定您是否能够在不使用动态 sql 在变量中构建更新语句的情况下完成此操作。
此语句将根据您输入的表名返回列列表:
select name from syscolumns
where [id] = (select [id] from sysobjects where name = 'tablename')
不确定我是否可以在这里避免循环....您需要将上面的结果加载到游标中,然后从中构建查询。伪编码:
set @query = 'update [1607348182] set '
load cursor --(we will use @name to hold the column name)
while stillrecordsincursor
set @query = @query + @name + ' = tmp_[1607348182]. ' +@name + ','
load next value from cursor
loop!
在循环中完成查询后,使用 exec sp_executesql @query。
只是一点警告......在这样的循环中构建动态 sql 可能会有点混乱。对于故障排除,将 select @query 放入循环中并观察 @query 构建。
编辑:不确定您是否能够一次更新所有 1000 行...@query 也可以增长的大小有逻辑限制(varchar(8000)?)。您可能必须划分代码,以便一次处理 50 列。将 syscolumns select 语句中的列放入带有 id 的临时表中,并构建您的动态 sql,以便一次更新 20 列(或 50 列?)。
另一种选择是使用 excel 来大规模构建它。选择列并将结果复制到电子表格的 a 列中。将 '= 放入 b 列,tmp.[12331312] 在 c 列中,将 a 列复制到 D 列,将逗号复制到 e 列。将整个电子表格复制到记事本中,您应该已经为您构建了更新语句的列。如果这是一个单一的事件,这不是一个糟糕的解决方案,不确定我是否会依赖它作为一个持续的解决方案。