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

SQL Server使用OPENJSON与JOIN时返回转换失败错误如何处理?

报错原因
  • 核心错误出在参数合法性校验逻辑:ISNULL(@JsonIds, 0) = 0 这行代码中,@JsonIds 是NVARCHAR字符串类型,0 是INT整数类型,SQL Server执行比较时会优先尝试把字符串隐式转换为INT类型,你传入的[1,4] 无法转为合法INT值,直接触发转换失败报错。
  • 额外风险点:OPENJSON 返回的value字段默认是NVARCHAR(4000)类型,和INT类型的Id字段关联时如果存在非数字值也可能触发转换错误,建议显式转换类型避免隐式转换隐患。
修复后的存储过程代码
CREATE OR ALTER PROCEDURE [MySP]
    @JsonIds NVARCHAR(200)  -- JSON Array of Ids.
AS
BEGIN
    -- 修正校验逻辑:先判断是否为NULL/空字符串,再校验JSON合法性
    IF (@JsonIds IS NULL OR LTRIM(RTRIM(@JsonIds)) = N'' OR ISJSON(@JsonIds) = 0)
    BEGIN
        RAISERROR('Invalid JSON parameter.', 16, 1)
        RETURN
    END

    SELECT T.*
    FROM MyTable T
    -- 显式把JSON返回值转为INT类型,消除隐式转换风险
    INNER JOIN OPENJSON(@JsonIds) AS Ids ON T.Id = CAST(Ids.value AS INT);
END
调用验证

执行以下语句即可正常返回结果:

EXEC [MySP] @JsonIds=N'[1,4]';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 11:15:08