我想将变量(表名)中的数据插入到存储过程中的另一个表中。但是当我尝试改变存储过程时,我得到一个错误。我究竟做错了什么?
SQL:
INSERT INTO DBNAME..Table (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM @Tablevariable;
错误:
必须声明表变量" @ Tablevariable"。
@Tablevariable
已在我的存储过程中声明。
答案 0 :(得分:0)
我认为没有办法FROM @TableVariable
。我认为你需要做任何一件事:
如果@TableVariable = 'Customers'
从customers表中选择,请将case语句粘贴在那里。问题是每次创建新表时都必须更新存储过程。
在SQL中将文本构建为字符串:DECLARE sqlCommand VARCHAR(MAX) = 'Select blah blah blah FROM ' + @TableVariable
(或类似的东西)。然后拨打exec(sqlCommand)
。但问题是,您不会在sqlCommand上进行查询优化。
答案 1 :(得分:0)
您不能将表名作为变量。您可以在存储过程中执行以下操作:
DECLARE @Tablevariable nvarchar(50) = 'MyTableName'
DECLARE @SQL nvarchar(MAX)
SET @SQL = 'INSERT INTO DBNAME..Table (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM ' + @Tablevariable
EXECUTE (@SQL)