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. 更稳定的替代方案(无需结果集映射)
你可以直接使用参数输出的方式获取值,容错率更高:
- 删除SQL最后一行的SELECT语句,在Execute SQL Task的
参数映射页添加两个参数:- 参数名:
TCId,方向:Output,类型:Int32,映射到你要存储TCId的SSIS变量 - 参数名:
IsSuccess,方向:Output,类型:Boolean,映射到你要存储IsSuccess的SSIS变量
- 参数名:
- 常规页的
ResultSet属性设置为无(None)即可,无需再配置结果集映射。
内容的提问来源于stack exchange,提问作者AMDI
相关产品推荐
相关产品推荐

