我在 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 变量:
- 用户::文件(字符串)
- 用户::FileId (Int)
并将参数映射到 SQL 任务上,如下所示:
- 变量 | 方向 | 类型 | 范围
- 用户::文件| 输入 | 字符串 | @z文件名
- 用户::文件 ID | 输出 | 整数32 | @ID
我尝试过使用变量类型(int16
,int32
和int64
; 甚至是字符串),但错误仍然存在。请帮忙!
编辑:
调试存储过程我在PRINT @Id
之前添加了一个END
,这会输出预期的值,但是在执行SELECT @Id
(输出参数)时会返回NULL
。
编辑2:
一位同事发现了问题并提供了他的解决方案,我在下面标记为答案。