如何在tableB中选择哪个名字是@tableB * FROM @tableA?

问题描述:

我正在创建一个存储过程,该存储过程必须创建一个表,该表的名称取决于输入变量。对于临时结果我已经声明了一个表变量:如何在tableB中选择哪个名字是@tableB * FROM @tableA?

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

输出表名称取决于用户的输入,所以我已经宣布另一个变量

declare @tableB varchar = ... 

到底临时结果必须被存储到表名称是@tableB,所以在存储过程中我试图写下面的语句:

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

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

+0

我在这里错过了什么? @tableB是一个正常的表吗?那么为什么你不能使用简单的动态插入查询? – 2010-12-04 19:27:14

你不能在这里使用表变量,尝试使用临时表。 创建表#tableA(...

更多信息:link text

创建表#A( C1 INT, C2 INT );

插入到#A值(1 ,2);

插入到#A值(3,4);

申报@sql VARCHAR(最大);

declare @tableB sysname ='## tableB';

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

打印@sql;

exec(@sql);

go

select * from ## tableB;

假设@tableB已经存在,第一个猜测是尝试:

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

这不是语法检查,因此要当心!

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