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

Execute SQL Task联合执行存储过程与SELECT语句无法获取返回值问题

SSIS Execute SQL Task 获取返回值解决方案

1. 修正SQL语句异常

你的现有SQL存在类型不匹配、别名识别异常的问题,先调整语句:

DECLARE @Query                  NVARCHAR(MAX) -- 放大长度避免语句截断
DECLARE @ParmDefinition         NVARCHAR(MAX)
DECLARE @Id           int
DECLARE @Usr_Id         VARCHAR(50)
DECLARE @TCId       INT
DECLARE @IsSuccess         bit

Set @Query = 'Exec InsertSp @Id,@Usr_Id,@TCId OUTPUT'
 
SET @ParmDefinition = '@Id INT,@Usr_Id VARCHAR(50),@TCId INT OUTPUT'
 
EXEC sp_executesql @Query,   
     @ParmDefinition,
     @Id=2,
     @Usr_Id='domain\fn.lastname',
     @TCId=@TCId OUTPUT

Set @Query = 'SELECT  TOP (1) @IsSuccessOut = IsSuccess
FROM dbo.TableA AS a
INNER JOIN dbo.TableB AS b
ON a.Id = b.Id
WHERE (b.Name = ''LoadDaily'')
ORDER BY StartTime DESC'
 
SET @ParmDefinition = '@IsSuccessOut BIT OUTPUT' -- 修正为BIT类型,和@IsSuccess变量匹配

EXEC sp_executesql @Query,@ParmDefinition,@IsSuccessOut=@IsSuccess output

SELECT @TCId AS TCId,@IsSuccess as IsSuccess -- 去掉别名的单引号,避免驱动识别为字符串

2. 调整Execute SQL Task配置

  • 常规页的ResultSet属性必须设置为单行(Single row),只有该模式下结果集映射才会生效。
  • 结果集映射页的结果名称必须和SQL最后SELECT返回的别名完全一致,分别填TCId、IsSuccess,对应映射到你的SSIS变量,不要使用索引0、1,避免识别错位。
  • 如果你使用SSIS变量存储SQL语句,需要将该变量的EvaluateAsExpression属性设置为True,确保语句运行时会正确计算,没有转义错误。

3. 更稳定的替代方案(无需结果集映射)

你可以直接使用参数输出的方式获取值,容错率更高:

  1. 删除SQL最后一行的SELECT语句,在Execute SQL Task的参数映射页添加两个参数:
    • 参数名:TCId,方向:Output,类型:Int32,映射到你要存储TCId的SSIS变量
    • 参数名:IsSuccess,方向:Output,类型:Boolean,映射到你要存储IsSuccess的SSIS变量
  2. 常规页的ResultSet属性设置为无(None)即可,无需再配置结果集映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:36:08