SQL 服务器 returns 使用 OPENJSON 和 JOIN 时转换失败错误

SQL Server returns Conversion failed error when using OPENJSON and JOIN

我需要使用 JSON 输入参数创建一个 SQL 服务器存储过程。

我遵循了 Microsoft 的这个文档:

我创建了以下存储过程,其中输入参数 @JsonIds 必须是存储在 NVARCHAR 数据类型变量中的 JSON 整数数组。

这是示例代码,与上述链接文档中显示的非常相似:

CREATE OR ALTER PROCEDURE [MySP]
    @JsonIds NVARCHAR(200)  -- JSON Array of Ids.
AS
BEGIN

    IF (ISNULL(@JsonIds, 0) = 0 OR ISJSON(@JsonIds) = 0)
    BEGIN
        RAISERROR('Invalid JSON parameter.', 16, 1)
        RETURN
    END

    SELECT T.*
    FROM MyTable T
    INNER JOIN OPENJSON(@JsonIds) AS Ids ON T.Id = Ids.value;
END

但是当我这样执行存储过程时:

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

这是结果:

Msg 245, Level 16, State 1, Procedure MySP, Line 21 [Batch Start Line 0]
Conversion failed when converting the nvarchar value '[1,4]' to data type int.

我不明白为什么会出现转换错误。

环境:

如果您想坚持使用您的测试方法,您需要用引号将 0 括起来,因为它无法检查 nvarchar json 字符串是否等于 int。

IF (ISNULL(N'[1,4]', '0') = '0' OR ISJSON(N'[1,4]') = 0)