没有结果行集与此查询的执行相关联

时间:2017-11-14 11:32:59

标签: sql-server ssis

我在SSIS 2016中创建一个执行SQL任务,该任务调用插入存储过程。我试图在输出参数中返回新创建的行的id,但面临以下错误。

  

没有结果行集与此查询的执行相关联

我已经设置了SQL Server Profiler以查看生成的内容,如下所示

declare @p4 int
set @p4=NULL
exec sp_executesql N'Exec [dbo].[InsertPkgAudit] @P1,@P2',N'@P1 varchar(16),@P2 int OUTPUT','CoreReferenceETL',@p4 output
select @p4

如果我手动执行以下操作

DECLARE @auditId INT;
EXEC [dbo].[InsertPkgAudit] @packageName = 'CoreReferenceETL', @auditId = @auditId OUTPUT;
PRINT @auditId;

很明显,存储过程很好但是在SSIS中调用它的方式有些问题。有人可以帮忙吗?

执行SQL任务包含以下语句

Exec [dbo].[InsertPkgAudit] @packageName =?, @auditId = ?

参数映射如下

enter image description here

结果窗格如下

enter image description here

存储过程如下:

CREATE Procedure [dbo].[InsertPkgAudit]
    @packageName varchar(100),
    @auditId int output
AS
BEGIN
    SET NOCOUNT ON 

    INSERT INTO [dbo].[PkgAudit] ([PackageName], [StartTime])
    VALUES (@packageName, GETDATE());

    SET @auditId = SCOPE_IDENTITY();
END

表结构如下

enter image description here

2 个答案:

答案 0 :(得分:0)

您告诉SSIS您的过程返回结果集。但事实并非如此。它会填充OUTPUT参数。

您可以更改proc以返回结果集,也可以修改Execute任务和

  1. 指定无结果集
  2. 将查询更改为:

    Exec [dbo].[InsertPkgAudit] @packageName =?, @auditId = ? OUTPUT

  3. 您可以找到完整的教程here

答案 1 :(得分:0)

我只是遇到了类似的问题,在寻找某种解决方案时,我遇到了这篇老文章。我无法在线找到解决方案,但是,这是我解决问题的方式。我希望这对将来的人们有所帮助。

如果您确实需要通过RowSet传递数据,则需要选择 'ColumnName'。

Declare @fname varchar(50)
Declare @lname varchar(50)

set @fname ='John'
set @lname= 'Doe'

select @fname, @lname--without column name

select @fname as 'firstName', @lname as 'LastName'--with column name

这是它们在结果中的显示方式。

enter image description here

您现在可以将结果映射到适当的变量。