You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSIS绑定存储过程输出参数到变量报错:值不在预期范围内

解决SSIS绑定存储过程输出参数时的“Value does not fall within the expected range”错误

问题背景

有如下SQL Server存储过程:

CREATE PROCEDURE [log].[SP_LogExecutionStep] 
    @ExecutionGUID [uniqueidentifier],
    @ProjectName NVARCHAR(50) = NULL ,
    @PackageName NVARCHAR(255) = NULL ,
    @PackageVersion NVARCHAR(10) = NULL,
    @ParentPackageName NVARCHAR(255) = NULL,
    @ParentExecutionID INT = NULL,
    @ExecutionStatus NVARCHAR(50) = NULL,
    @ExecutionResult NVARCHAR(50) = NULL,
    @ExecutionMessage NVARCHAR(255) = NULL, 
    @ExecutionID INT OUTPUT
AS
BEGIN
    -- Start Logging.
    INSERT INTO log.T_LOG_Execution (ID_ExecutionGUID, LB_ProjectName, LB_PackageName, LB_PackageVersion, LB_ParentPackageName, ID_ParentExecutionId, LB_ExecutionStatus, LB_ExecutionResult, LB_ExecutionMessage, DT_ExecutionStartDate)
        SELECT 
            @ExecutionGUID, @ProjectName, @PackageName, @PackageVersion, @ParentPackageName,
            @ParentExecutionId, @ExecutionStatus, 
            CASE @ExecutionStatus 
                WHEN 'Running' THEN 'In Progress' 
                ELSE @ExecutionResult 
            END, @ExecutionMessage, GETDATE()

    -- Set Output Parameter as the last Identity created to be used for subsequent logging.
    SELECT @ExecutionID = CAST(SCOPE_IDENTITY() AS INT)
END

在SSIS中调用该存储过程并将@ExecutionID输出参数绑定到SSIS变量时,出现错误:

Value does not fall within the expected range

改用结果集方式可正常运行,但需使用输出参数方案解决该问题。

关键排查与解决步骤

1. 确认SSIS变量的数据类型匹配

  • 存储过程中@ExecutionID是INT类型,对应的SSIS变量必须设置为Int32类型,不能用Int64或其他数值类型,否则会因类型不匹配触发范围错误。
  • 检查变量的“数据类型”属性,确保选择Int32。

2. 检查参数方向与名称配置

  • 在SSIS的“执行SQL任务编辑器”→“参数映射”中,@ExecutionID的方向必须设置为输出,不能误设为输入或输入输出。
  • 若使用OLE DB连接管理器,参数需按定义顺序映射;若使用ADO.NET连接管理器,需确保参数名称完全匹配存储过程中的定义(格式为@参数名)。

3. 验证存储过程输出参数的赋值逻辑

  • 检查log.T_LOG_Execution表的自增列数据类型:如果是BIGINT,需将存储过程中@ExecutionID改为BIGINT,同时SSIS变量改为Int64,避免数值超出INT范围。
  • 单独执行存储过程测试输出参数是否正常返回:
    DECLARE @ExecID INT, @GUID UNIQUEIDENTIFIER = NEWID()
    EXEC [log].[SP_LogExecutionStep] 
        @ExecutionGUID = @GUID,
        @ExecutionStatus = 'Running',
        @ExecutionID = @ExecID OUTPUT
    SELECT @ExecID
    
    确认返回的@ExecID是合法的INT值。

4. 检查连接管理器的SQL语句格式

  • 若使用OLE DB连接管理器,SQL语句需按参数顺序占位,输出参数末尾标注OUTPUT:
    EXEC [log].[SP_LogExecutionStep] ?, ?, ?, ?, ?, ?, ?, ?, ?, ? OUTPUT
    
  • 若使用ADO.NET连接管理器,可直接使用命名参数调用,确保输出参数标注OUTPUT:
    EXEC [log].[SP_LogExecutionStep] 
        @ExecutionGUID = @ExecutionGUID,
        @ProjectName = @ProjectName,
        @PackageName = @PackageName,
        @PackageVersion = @PackageVersion,
        @ParentPackageName = @ParentPackageName,
        @ParentExecutionID = @ParentExecutionID,
        @ExecutionStatus = @ExecutionStatus,
        @ExecutionResult = @ExecutionResult,
        @ExecutionMessage = @ExecutionMessage,
        @ExecutionID = @ExecutionID OUTPUT
    

5. 确保参数映射顺序正确

  • 所有参数的映射顺序必须和存储过程定义的参数顺序完全一致,包括可选参数(即使传入NULL),遗漏或顺序错误会导致输出参数绑定失败。

内容的提问来源于stack exchange,提问作者Hassan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 11:08:14