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

SQL Server 15.x中JSON API消费自动化执行失败排查求助

排查SQL Server Agent作业执行JSON API调用报错13609的步骤

核心可能原因

手动执行正常但作业失败,大概率是执行环境差异或API响应内容变化导致,而非代码本身语法问题,具体方向:

  • SQL Server Agent服务/代理账户的网络访问权限不足,API返回错误HTML而非合法JSON
  • 作业执行的数据库上下文、SET选项与手动执行不一致,影响JSON解析逻辑
  • 作业调度时的请求参数与手动测试不同,API返回异常格式内容

具体排查操作

  1. 捕获作业执行时的API原始响应
    在作业的SQL代码中添加日志逻辑,把API返回的原始内容存入日志表,确认是否为合法JSON:

    -- 创建临时日志表(若未存在)
    IF OBJECT_ID('tempdb..#ApiResponseLog') IS NULL
    CREATE TABLE #ApiResponseLog (ResponseContent NVARCHAR(MAX), ExecTime DATETIME DEFAULT GETDATE());
    
    -- 获取API响应并写入日志
    DECLARE @rawResponse NVARCHAR(MAX);
    SELECT @rawResponse = BulkColumn
    FROM OPENROWSET(BULK 'https://your-target-api.com/endpoint', SINGLE_CLOB) AS ApiData;
    
    INSERT INTO #ApiResponseLog (ResponseContent) VALUES (@rawResponse);
    
    -- 尝试解析(保留原逻辑)
    BEGIN TRY
        SELECT *
        FROM OPENJSON(@rawResponse)
        WITH (
            -- 替换为你的字段映射
            RecordId INT '$.id',
            RecordName NVARCHAR(200) '$.name'
        );
    END TRY
    BEGIN CATCH
        -- 输出错误信息+原始响应片段
        SELECT ERROR_MESSAGE() AS ErrorMsg, LEFT(@rawResponse, 100) AS ResponsePreview;
    END CATCH
    

    作业执行后查看日志表,若响应是HTML(比如包含<html>、403 Forbidden等内容),直接指向权限问题。

  2. 检查Agent账户的API访问权限

    • 找到SQL Server Agent服务使用的账户(在服务管理器中查看)
    • 在Agent所在服务器上,用该账户登录,手动访问API地址,确认返回正常JSON
    • 若无法访问,需调整网络策略(防火墙、代理)或给该账户添加API访问权限
  3. 对齐手动与作业的执行环境

    • 作业步骤中确认选择了正确的数据库(和手动执行的数据库一致)
    • 对比手动执行与作业的SET选项:执行DBCC USEROPTIONS查看手动执行的选项,在作业代码开头添加相同的SET语句(比如SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON;,这些选项会影响JSON函数行为)
  4. 验证请求参数的一致性
    若API调用包含动态参数(比如日期范围、归档标识),确认作业执行时的参数值与手动测试完全一致,避免因调度时间差异导致API返回异常内容

  5. 定位错误位置的具体内容
    根据错误提示“位置16处发现意外字符'"'”,查看捕获到的原始响应第16个字符附近的内容,判断是API返回的格式错误,还是请求构造时的语法问题(比如参数拼接错误导致请求URL无效)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:01:13