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.
我不明白为什么会出现转换错误。
环境:
- SQL 服务器 2017 v14.0.3356.20
- SSMS v18.9.1
如果您想坚持使用您的测试方法,您需要用引号将 0 括起来,因为它无法检查 nvarchar json 字符串是否等于 int。
IF (ISNULL(N'[1,4]', '0') = '0' OR ISJSON(N'[1,4]') = 0)
我需要使用 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.
我不明白为什么会出现转换错误。
环境:
- SQL 服务器 2017 v14.0.3356.20
- SSMS v18.9.1
如果您想坚持使用您的测试方法,您需要用引号将 0 括起来,因为它无法检查 nvarchar json 字符串是否等于 int。
IF (ISNULL(N'[1,4]', '0') = '0' OR ISJSON(N'[1,4]') = 0)