【问题标题】:How to insert data into another table from a variable in SQL Server stored procedure如何从 SQL Server 存储过程中的变量将数据插入另一个表
【发布时间】:2017-04-25 20:12:16
【问题描述】:

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

SQL:

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

错误:

必须声明表变量“@Tablevariable”。

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

【问题讨论】:

  • 我声明的变量包含一个表名。我想从这个变量中将数据插入到另一个表中。
  • 发布存储过程的全部内容。
  • 您必须向我们展示您的代码,以便我们为您提供帮助。您的代码中有一个错误。除非您向我们展示您的代码,否则我们无法告诉您它是什么。
  • 如果没有这块插入,存储的过程可以正常工作......
  • 我不能在这里发布整个代码......

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


【解决方案1】:

您不能将表名作为变量。你可以在存储过程中做这样的事情:

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)

【讨论】:

    【解决方案2】:

    我认为没有办法做到FROM @TableVariable。我认为您需要这样做:

    1. 在其中粘贴一个 case 语句,以便如果 @TableVariable = 'Customers' 从客户表中选择。问题是每次创建新表时都必须更新存储过程。

    2. 将文本构建为 SQL 中的字符串:DECLARE sqlCommand VARCHAR(MAX) = 'Select blah blah blah FROM ' + @TableVariable(或类似的东西)。然后拨打exec(sqlCommand)。但问题是,您不会在 sqlCommand 上获得查询优化。

    【讨论】:

    • FROM @tablevairable 在 SQL Server 中工作得很好。那不是问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    相关资源
    最近更新 更多