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……

解决方案 »

  1.   

    办法1:在循环以外,将所有需要的临时表建立好,循环内只完成填数据和查询的功能。
    办法2:循环时,每次重新生成上一次循环的临时表,再进行数据操作。
      

  2.   

    关键是临时表的结构也是动态生成的,要是每次都先建就累死了,加起来有一百多个字段,够写一会儿的了。
        我找到了一个方法就是把局部临时表改为全局,这样就可以通过了##ri就行了。幸好是临行表,断开了就没了。
        请问还有没有别的什么更好的方法吗?