SSIS执行SQL存储过程输出参数类型不匹配

时间:2013-10-24 14:16:32

标签: sql-server stored-procedures ssis

我在SSIS包上遇到以下错误:

  

[执行SQL任务]错误:执行查询“EXEC [spGetFileId] @zFileName,@ Id”失败,并显示以下错误:“分配给变量”User :: FileId“的值的类型与当前不同变量类型。变量在执行期间不能改变类型。变量类型是严格的,除了Object类型的变量。

我创建了一个执行SQL任务,它在SQL服务器上执行一个简单的存储过程:

CREATE PROCEDURE [dbo].[spGetFileId]
    @zFileName VARCHAR(255),
    @Id INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;
    SELECT  @Id = [Id]
    FROM    [tblFileLog]
    WHERE   [zFileName] = @zFileName
END

任务的 SQLStatement 属性为:

EXEC [spGetFileId] @zFileName, @Id

我有以下 SSIS变量

  
      
  • 用户::文件(字符串)
  •   
  • User :: FileId (Int)
  •   

并且参数映射到SQL任务上,如下所示:

  
      
  • 变量|方向|输入|参数
  •   
  • 用户::文件 |输入|字符串| @zFileName
  •   
  • User :: FileId |输出| Int32 | @Id
  •   

我尝试过使用变量类型(int16int32int64;甚至是字符串),但错误仍然存​​在。请帮忙!

修改

调试存储过程我在PRINT @Id之前添加了END,这会输出预期值,但在执行SELECT @Id(输出参数)时会返回NULL。< / p>

EDIT2:

一位同事发现了这个问题并提供了他的解决方案,我在下面将其标记为答案。

3 个答案:

答案 0 :(得分:3)

执行SQL任务上的 SQLStatement 必须在OUTPUT参数后包含@Id

EXEC [spGetFileId] @zFileName, @Id OUTPUT

您需要将@User :: FileID参数设置为Output参数,以将变量设置为readwrite而不是readonly,以便将其写入。

答案 1 :(得分:2)

使用结果集,将ResultSet设置为“Single row”,并将结果映射到变量,而不是使用输出参数:

CREATE PROCEDURE [dbo].[spGetFileId]
    @zFileName VARCHAR(255)
AS
BEGIN
    SET NOCOUNT ON;
    SELECT  [Id]
    FROM    [tblFileLog]
    WHERE   [zFileName] = @zFileName
END

enter image description here

答案 2 :(得分:1)