如何从SQL Server存储过程中的变量将数据插入另一个表

时间:2017-04-25 20:12:17

标签: sql sql-server sql-server-2008 sql-server-2012

我想将变量(表名)中的数据插入到存储过程中的另一个表中。但是当我尝试改变存储过程时,我得到一个错误。我究竟做错了什么?

SQL:

INSERT INTO DBNAME..Table (Col1, Col2, Col3)
    SELECT Col1, Col2, Col3
    FROM @Tablevariable;

错误:

  

必须声明表变量" @ Tablevariable"。

@Tablevariable已在我的存储过程中声明。

2 个答案:

答案 0 :(得分:0)

我认为没有办法FROM @TableVariable。我认为你需要做任何一件事:

  1. 如果@TableVariable = 'Customers'从customers表中选择,请将case语句粘贴在那里。问题是每次创建新表时都必须更新存储过程。

  2. 在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)