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

Azure Data Factory运行SQL Server存储过程报JSON格式错误问题求助

故障根因

该报错的本质是ADF传入@json参数时的序列化逻辑不符合预期:
你在ADF存储过程参数配置中,json参数的value直接传入了数组类型的对象,同时声明了type为String。ADF不会自动将数组对象序列化为标准JSON字符串,而是会默认调用.NET的ToString()方法对数组对象做转换,最终得到的值为System.Collections.Generic.List1[System.Object],该字符串第一个字符就是S`,完全匹配报错提示的"Unexpected character 'S' is found at position 0"。
而你本地调用时直接传入的是JSON数组结构的字符串形式,自然不会触发该问题。

故障排查步骤
  • 验证ADF实际传入的参数值:在ADF存储过程活动的前一步新增一个Set Variable活动,将你要传给@json参数的输入值用@string()函数包裹后赋值给变量,运行流水线调试查看变量的实际输出,如果输出为System.Collections.Generic.List1[System.Object]`即可确认根因。
  • 验证存储过程入参类型:确认SQL Server中存储过程的@json参数的声明类型为NVARCHAR(MAX),该类型是SQL解析JSON的标准入参类型,避免因为类型截断导致的JSON格式错误。
解决方案

方案1(推荐,ADF侧调整参数配置)

在ADF配置json参数的value时,用ADF内置函数将数组对象主动序列化为合法JSON字符串再传入:

@string(你原本要传的数组值,比如activity('前序活动名').output)

如果转换后的字符串存在多余的转义反斜杠,再用replace函数处理即可:

@replace(string(activity('前序活动名').output), '\\', '')

参数type保持String不变即可,调整后传入SQL的就是符合要求的JSON字符串,可正常被OPENJSON解析。

方案2(兜底,SQL侧调整存储过程逻辑)

如果调整ADF流水线成本较高,可在存储过程开头增加参数校验转换逻辑,对传入的异常@json先做预处理:

-- 异常值判断
IF LEFT(@json, 6) = 'System'
BEGIN
    RAISERROR('传入的JSON参数格式异常,为.NET类型序列化结果',16,1)
    RETURN
END

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:54:02