use tempdb
declare @tTableIndex int --增量
declare @tTableName sysname --表名
declare @tcol varchar(8000) --列名
declare @tRTableName sysname --结果表
declare @tRNewTableName sysname --最终结果表
set @tTableIndex = 2
while @tTableIndex <14
begin
set @tTableName = '#' + LTRIM(str(@tTableINdex))
set @tRTableName = '#r' + LTRIM(STR(@tTableINdex-1))
set @tRNewTableName = '#r' + LTRIM(STR(@tTableINdex))
exec #myColums @tTableName,'gsdm',@tcol OUTPUT
exec('select A.* , '+ @tcol + ' into '+ @tRNewTableName +' from ' + @tRTableName + ' A Left Join '+ @tTableName + ' B ON A.gsdm = B.gsdm')
set @tTableIndex = @tTableIndex + 1
end
GO
当执行到
exec('select A.* , '+ @tcol + ' into '+ @tRNewTableName +' from ' + @tRTableName + ' A Left Join '+ @tTableName + ' B ON A.gsdm = B.gsdm')
时我的本意是将
#r(i-1)同#i联接后创建成#ri表在下一次循环中使用,但是 执行了 exec 后 创建的#ri就自动删除了。因为查询的列@tcol 是一个字符串我又不能直接写select 语句。这样的情况怎么解决??怎么保住我的#ri表
注:1.我只能创建临时表,无权创建表。
2.这里提到的i是一个变化的增量i= 1,2,3,4,5,6,7……
declare @tTableIndex int --增量
declare @tTableName sysname --表名
declare @tcol varchar(8000) --列名
declare @tRTableName sysname --结果表
declare @tRNewTableName sysname --最终结果表
set @tTableIndex = 2
while @tTableIndex <14
begin
set @tTableName = '#' + LTRIM(str(@tTableINdex))
set @tRTableName = '#r' + LTRIM(STR(@tTableINdex-1))
set @tRNewTableName = '#r' + LTRIM(STR(@tTableINdex))
exec #myColums @tTableName,'gsdm',@tcol OUTPUT
exec('select A.* , '+ @tcol + ' into '+ @tRNewTableName +' from ' + @tRTableName + ' A Left Join '+ @tTableName + ' B ON A.gsdm = B.gsdm')
set @tTableIndex = @tTableIndex + 1
end
GO
当执行到
exec('select A.* , '+ @tcol + ' into '+ @tRNewTableName +' from ' + @tRTableName + ' A Left Join '+ @tTableName + ' B ON A.gsdm = B.gsdm')
时我的本意是将
#r(i-1)同#i联接后创建成#ri表在下一次循环中使用,但是 执行了 exec 后 创建的#ri就自动删除了。因为查询的列@tcol 是一个字符串我又不能直接写select 语句。这样的情况怎么解决??怎么保住我的#ri表
注:1.我只能创建临时表,无权创建表。
2.这里提到的i是一个变化的增量i= 1,2,3,4,5,6,7……
办法2:循环时,每次重新生成上一次循环的临时表,再进行数据操作。
我找到了一个方法就是把局部临时表改为全局,这样就可以通过了##ri就行了。幸好是临行表,断开了就没了。
请问还有没有别的什么更好的方法吗?