我正在创建一个存储过程,它必须创建一个名称取决于输入变量的表。对于临时结果,我已经声明了一个表变量:
declare @tableA TABLE(
column1,
column2,
..
)
输出表名称取决于用户的输入,因此我声明了另一个变量
declare @tableB varchar = ...
最后,临时结果必须存储到名为@tableB的表中,所以在存储过程中我尝试编写以下语句:
declare @sql varchar(max)
set @sql = 'SELECT * INTO ' + @tableB + ' FROM @tableA'
exec(@sql)
这是不正确的。有谁知道如何将表变量中的值插入到名称为变量的表中?
答案 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不存在,为什么它的名字需要来自用户?