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

ADF传递JSON参数到Azure SQL存储过程报格式错误如何解决

报错根因

你遇到的13609错误核心原因是ADF传递给SQL存储过程的@BlobFileName参数不是合法的JSON序列化字符串:ADF默认不会自动将数组/对象类型的参数序列化为JSON文本,而是直接调用对象的ToString()方法,返回的是类似System.Collections.ArrayList的类名文本,首字符就是S,完全匹配你报错里「位置0出现意外字符S」的描述。

解决步骤

  • 修改ADF存储过程参数的赋值逻辑
    给BlobFileName参数赋值时,用ADF内置的string()函数将数组对象强制序列化为JSON字符串。
    如果你用变量存储Blob文件数组,原来的参数值是@variables('BlobFileListArray'),修改为:
    @string(variables('BlobFileListArray'))
    
    如果你直接用前序活动(比如Lookup、Get Metadata)的输出数组作为参数值,就写成对应活动输出的包裹格式:
    @string(activity('你的前序活动名').output.value)
    
  • 修正存储过程的OPENJSON查询路径
    调整后你传递给@BlobFileName的是直接的数组JSON(格式为[{"itemName":"xxx",...},...]),不需要再从$.value路径取值,还可以新增JSON合法性校验逻辑方便后续调试,修改后存储过程代码如下:
    ALTER PROCEDURE dbo.SP_INSERT_BLOBFILELIST (@BlobFileName NVARCHAR(MAX))
    AS
    BEGIN
        -- 可选:增加JSON格式校验,异常时直接抛出明确报错
        IF ISJSON(@BlobFileName) = 0
        BEGIN
            THROW 50001, '传入的BlobFileName参数不是合法JSON格式', 1;
        END
    
        INSERT INTO dbo.BlobFileList
        SELECT GETDATE(), * 
        FROM OPENJSON(@BlobFileName)
        WITH (
            itemName VARCHAR(500) N'$.itemName', 
            lastModified DATETIME N'$.lastModified'
        )
    END
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:15:00