需要通过 OpenQuery 在 MS SQL 上针对 DB2 运行动态 SQL,以 JSON 格式返回结果,然后将其作为输出参数返回到存储过程中
如示例代码所示,我尝试使用表变量,但出现此错误:
INSERT 语句中不允许使用 FOR JSON 子句
我也尝试将查询包装到 CTE 中,但鉴于 JSON 列名更改,我无法使用 * 或出现此错误:
没有为“tbl”的第 1 列指定列名。
所以我很茫然。我需要运行它并在 Output 参数中获取 JSON,但鉴于我必须通过 OpenQuery 和动态 SQL 混合调用 DB2 来设置参数,所以我找不到有效的语法。
create procedure uspTesting (
@inAccountNumber nvarchar(20),
@outJSON nvarchar(max) output)
as
begin declare @result table (ResultJson nvarchar(max));
declare @tsql nvarchar(4000) = '
select name, age
from openquery(db2link,''
select name,
age
from db2.account
where accountnumber = ''''' + @inAccountNumber + ''''')'') tbl for json auto';
insert into @result
EXEC (@TSQL);
select @outJSON = ResultJson from @result; End
我要查找的结果是输出参数@outJSON 中的 JSON 字符串。