Power Automate执行带输出参数的存储过程无返回值问题
Power Automate执行带OUTPUT参数的存储过程无法获取返回值问题排查
问题详情
- 在Power Automate中调用存储过程
[APP].[GetRecordId]时,无法获取到OUTPUT参数@RecordId的返回值,返回结果里OutputParameters字段为空 - 通过SQL Server Profiler捕获Power Automate发送的查询语句,直接在Azure Data Studio执行可正常返回Id
- 已尝试切换至
Execute A SQL Query (V2)执行该存储过程(本地测试通过),且确认执行账号具备足够权限;另一同类型使用OUTPUT参数插入记录的存储过程可正常返回Inserted.Id
存储过程代码
ALTER PROC [APP].[GetRecordId] @GUID uniqueidentifier = null, @RecordId int OUTPUT AS SET NOCOUNT ON; SELECT TOP 1 @RecordId = Id FROM APP.SpecialTable WHERE RecordGUID = @GUID; RETURN; GO
Power Automate返回结果
{ "ResultSets": {}, "ReturnCode": 0, "OutputParameters": {} }
排查与解决方案
1. 确认Power Automate参数配置正确性
在Execute a stored procedure (V2)步骤中,必须将@RecordId参数的类型设置为Output:
- 进入步骤的参数配置页
- 找到
@RecordId参数,将类型从默认的Input修改为Output - 确保参数数据类型选择
int,与存储过程定义完全匹配
2. 修改存储过程,添加显式结果集返回
部分场景下,Power Automate对纯OUTPUT参数的解析存在兼容问题,可在存储过程末尾添加SELECT语句返回输出参数,同时保留原OUTPUT定义:
ALTER PROC [APP].[GetRecordId] @GUID uniqueidentifier = null, @RecordId int OUTPUT AS SET NOCOUNT ON; SELECT TOP 1 @RecordId = Id FROM APP.SpecialTable WHERE RecordGUID = @GUID; -- 新增结果集,让Power Automate可捕获返回值 SELECT @RecordId AS RecordId; RETURN; GO
修改后,Power Automate既可以通过ResultSets获取返回的Id,OutputParameters也会正常填充。
3. 规范Execute A SQL Query (V2)的调用语法
使用该步骤时,需显式声明输出参数并带上OUTPUT关键字,示例调用语句:
DECLARE @OutputId int; EXEC [APP].[GetRecordId] @GUID = '目标GUID值', @RecordId = @OutputId OUTPUT; SELECT @OutputId AS RecordId;
执行后可直接从查询结果集中提取返回的Id。
4. 临时验证NOCOUNT设置的影响
虽然存储过程中已设置SET NOCOUNT ON,但少数情况下Power Automate的驱动对该设置的处理有差异,可临时注释掉该语句测试是否能正常获取输出参数(测试完成后建议恢复,避免产生额外结果集)。
内容的提问来源于stack exchange,提问作者Steven Bitaxi
相关产品推荐
相关产品推荐

