如何选择INTO tableB的名称是@tableB * FROM @tableA?

时间:2010-12-04 18:36:28

标签: sql sql-server-2008

我正在创建一个存储过程,它必须创建一个名称取决于输入变量的表。对于临时结果,我已经声明了一个表变量:

declare @tableA TABLE(
column1,
column2,
..
)

输出表名称取决于用户的输入,因此我声明了另一个变量

declare @tableB varchar = ...

最后,临时结果必须存储到名为@tableB的表中,所以在存储过程中我尝试编写以下语句:

declare @sql varchar(max)
set @sql = 'SELECT * INTO ' + @tableB + ' FROM @tableA'
exec(@sql)

这是不正确的。有谁知道如何将表变量中的值插入到名称为变量的表中?

2 个答案:

答案 0 :(得分:1)

您不能在此处使用表变量,请尝试使用临时表。 创建表#tableA(...

有关详细信息:link text

  

创建表#A(     c1 int,     c2 int   );

     

插入#A值(1,2);

     

插入#A值(3,4);

     

声明@sql varchar(max);

     

声明@tableB sysname ='## tableB';

     

设置@sql ='SELECT * INTO'+ @tableB +'FROM #A';

     

打印@sql;

     

exec(@sql);

     

     

从## tableB中选择*;

答案 1 :(得分:0)

假设@tableB已经存在,首先猜测是尝试:

SET @sql =
    'INSERT
    (
        col1,
        col2
    )
    INTO ' + @tableB + ' 
    SELECT 
    (
        col1, 
        col2
    )
    FROM
        @tableA'

这不是语法检查,所以要小心!

如果@tableB不存在,为什么它的名字需要来自用户?