【问题标题】:SQL Server INSERT INTO using EXECUTESQL Server INSERT INTO 使用 EXECUTE
【发布时间】:2015-10-09 11:27:08
【问题描述】:

我正在尝试使用EXECUTE 语句将一些值插入到表中。

我找到了几个例子,但是,这些并不能回答我的问题。

注意: 下面给出的来源是该过程的代码。所有提到的变量都被声明和初始化。

我尝试的第一种方法:

结果:

错误:过程或函数指定的参数过多。

而且我完全理解我为什么会得到这个。因为sp_executesql 不允许有超过 4 个参数,它无法识别哪个去哪里。

第二次尝试(我只想使用执行语句将输出获取到变量中,然后将其放入表中):

我得到:

必须声明标量变量“@crlf”

实际上这个变量是在这个过程的顶部声明的,但是这个对我来说不是很清楚,为什么它仍然抱怨......

将执行语句和数字(附加值)放入表中的最充分方法是什么?

【问题讨论】:

  • 在第二部分和声明部分中,您没有定义@crlf ..那为什么会出现错误。行。你想插入 exec 的输出,对吗?
  • @Ajay2707,请不要将大多数代码作为图像。
  • 抱歉,我提供的信息不足。所有这些代码都在存储过程中,变量@crlf 在它的顶部声明。这就是为什么它让我感到困惑......

标签: sql-server database sql-server-2012 insert-into


【解决方案1】:

作为唯一的解决方法,我可以建议使用临时表。应该很简单:

SELECT TOP (0) column1
INTO #TemporaryResults
FROM [master].[dbo].[table_1];

INSERT INTO #TemporaryResults
EXECUTE sp_executesql @sql, N'@object_id INT, @crlf CHAR(2)', @object_id, @crlf;

INSERT INTO [master].[dbo].[table_1] (column1, column2)
SELECT column1, 1
FROM #TemporaryResults;
  1. 从 [table_1] column1 创建 column1 的副本
  2. 将 SP 生成的记录插入其中
  3. 将记录插入到实际表中

【讨论】:

    【解决方案2】:

    请按照下面的例子试试

    DECLARE @IntVariable int;
    DECLARE @SQLString nvarchar(500);
    DECLARE @ParmDefinition nvarchar(500);
    DECLARE @max_title varchar(30);
    
    SET @IntVariable = 197;
    SET @SQLString = N'SELECT @max_titleOUT = max(JobTitle) 
       FROM AdventureWorks2012.HumanResources.Employee
       WHERE BusinessEntityID = @level';
    SET @ParmDefinition = N'@level tinyint, @max_titleOUT varchar(30) OUTPUT';
    
    EXECUTE sp_executesql @SQLString, @ParmDefinition, @level = @IntVariable, @max_titleOUT=@max_title OUTPUT;
    SELECT @max_title;
    

    观察

    1. SQL 查询需要一个参数@level,这就是我们将其声明为参数的原因

    2. SQL 查询再次返回@max_titleOUT 处的输出。所以我们也将它声明为参数。所以最终的参数列表是

      SET @ParmDefinition = N'@level tinyint, @max_titleOUT varchar(30) OUTPUT';
      
    3. 现在我们必须将@level 值发送到动态查询,这就是我们使用@level = @IntVariable@IntVariable 值发送到@level 的原因

    4. 最后通过@max_titleOUT = @max_title OUTPUT我们将动态查询的输出保存在@max_titleOUT,将值复制到@max_title

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      相关资源
      最近更新 更多