我有两个表具有相同的结构和非常大的字段数(约1000).我需要执行2次操作
1)从第二个表插入所有行到拳头.例:
1)从第二个表插入所有行到拳头.例:
INSERT INTO [1607348182] SELECT * FROM _tmp_1607348182;
2)从第二个表更新第一个表
但是对于更新,我无法找到适当的sql语法进行更新.
查询如下:
Update [1607348182] set [1607348182].* = tmp.* from [1607348182] inner join _tmp_1607348182 as tmp on tmp.recordid = [1607348182].recordid
要么
Update [1607348182] from [1607348182] inner join _tmp_1607348182 as tmp on tmp.recordid = [1607348182].recordid
无效.
解决方法
不确定是否能够在不使用动态sql在变量中构建update语句的情况下完成此操作.
此语句将根据您输入的表名返回列的列表:
select name from syscolumns where [id] = (select [id] from sysobjects where name = 'tablename')
不确定我是否可以在这里避免循环….你需要将上面的结果加载到游标中,然后从中构建一个查询. Psuedo编码:
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会让人感到有些困惑.对于故障排除,在循环中选择@query并观察@query是否构建.
编辑:
不确定你是否能够同时在更新中完成所有1000行…对于@query也可以增长的大小有逻辑限制(varchar(8000)?).您可能必须划分代码,以便一次处理50列.将syscolumns select语句中的列放入具有id的临时表中并构建动态sql,以便一次更新20列(或50?).
另一种选择是使用excel来大规模构建它.列是否选择并将结果复制到电子表格的a列中.把’=放在b栏中,tmp.[12331312]在列c中,将列a复制到列D中,将逗号复制到列e中.将整个电子表格复制到记事本中,您应该为您构建更新语句的列.如果这是一次性事件并不是一个糟糕的解决方案,不确定我是否依赖于此作为一个持续的解决方案.