有高手知道动态创建表变量的不?就是列是动态变化的。
set @sql='declare @Temp table('+@ColumnNameChar+')'
--print @sql
--exec sp_executesql @sql, N'@Temp   table   out',@Temp   out
exec (@sql)这里不报错,但是底下利用@temp的时候说没声明,能这么声明吗?

解决方案 »

  1.   

    貌似不行的,用临时表吧declare @ColumnNameChar varchar(100),@sql varchar(1000)set @ColumnNameChar='col varchar(10)'set @sql='create table ##Temp('+@ColumnNameChar+')' exec (@sql) insert ##temp select 'test'select * from ##temp/**
    col        
    ---------- 
    test(所影响的行数为 1 行)
    **/
      

  2.   

    表变量的作用域限制了@Temp只在exec()执行过程中有效,如果一定要用表变量,把对表变量访问的SQL也封在同一段动态SQL中吧。
      

  3.   

    表变量的作用域限制了@Temp只在exec()执行过程中有效,如果一定要用表变量,把对表变量访问的SQL也封在同一段动态SQL中吧。-----
    正有此意,哈哈
      

  4.   

    declare @sql as varchar(1000)
    declare @i as int
    set @i = 0
    set @sql = 'create table tb ('
    while @i <= 10
    begin
      set @sql = @sql +
      '[' + convert(varchar(10),dateadd(day , @i , getdate()),120) + '] int ,'
      set @i = @i + 1
    end
    set @sql = left(@sql , len(@sql) - 1) + ') select * from tb'
    exec(@sql)/*
    2009-04-03  2009-04-04  2009-04-05  2009-04-06  2009-04-07  2009-04-08  2009-04-09  2009-04-10  2009-04-11  2009-04-12  2009-04-13
    ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------(0 行受影响)
    */drop table tb
      

  5.   

    表变量虽然在内存,限制还是太多。
    1、@tb不能在exec外、存储过程续存
    2、没有索引
    3、不能select ... into @tb from ...(表结构无须事先定义)
      

  6.   

    这问题没法实现,在SQL2005里,因为EXEC 是有域限制的。