sql – 如何在不指定列名的情况下从另一个表更新一个表?
我有两个表具有相同的结构和非常大的字段数(约1000).我需要执行2次操作
1)从第二个表插入所有行到拳头.例: INSERT INTO [1607348182] SELECT * FROM _tmp_1607348182; 2)从第二个表更新第一个表 查询如下: 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是否构建. 编辑: 另一种选择是使用excel来大规模构建它.列是否选择并将结果复制到电子表格的a列中.把’=放在b栏中,tmp.[12331312]在列c中,将列a复制到列D中,将逗号复制到列e中.将整个电子表格复制到记事本中,您应该为您构建更新语句的列.如果这是一次性事件并不是一个糟糕的解决方案,不确定我是否依赖于此作为一个持续的解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- percona-toolkit之pt-kill 杀掉mysql查询或连接的方法
- sql – 重命名列而不破坏脚本和存储过程
- entity-framework – 启用 – 迁移“对象引用未设置为对象的
- sql-server-2008 – 如何在存储过程中为jqGrid进行分页?
- 数据库 – 当pg_cancel_backend不起作用时我该怎么办?
- sql-server – 使用动态sql在指定数据库中创建View?
- 用SQL语句查询数据库中某一字段下相同值的记录方法
- 浅淡SqlServer的Top与Oracle的RowNum
- sql-server – 在SSRS中将日期从mm / dd / yyyy转换为dd /
- SQLServer 实现rownum 的功能