MSSQL查询JSON显示Null值



在名为Subjects的SQL Server数据库中,我有一个表PublicRelations和一个列Students

[
{ "Label": "Name",     "ColumnValue": "Trudie" },      
{ "Label": "Class",    "ColumnValue": "PublicRelations" },      
{ "Label": "Room",     "ColumnValue": "8049" },      
{ "Label": "HttpPath", "ColumnValue": "https://www.google.com/" }
]

当我使用Json_value运行下面的查询时,我只得到NULL。我想让它显示数组中的值。我相信这可能与4000个字符的限制有关?

SELECT      [StuduentID], 
[Students],
--JSON_VALUE([Students],'$.ColumnValue') AS Name --Only returns NULL
FROM        [Subjects].[dbo].[PublicRelations] c
CROSS APPLY OPENJSON(c.Students)
WITH (    Name int '$.Name',
Value nvarchar(255) '$.ColmunValue'
) AS      jsonValues
WHERE       jsonValues.ColumnValue = 'Trudie'

查询有效,我可以找到我需要的东西,但同样,只有当我想在结果中显示JSON列的那部分时,我才会得到NULL

该语句是错误的,您有以下问题(正如@MartinSmith已经提到的(:

  • 语法错误-'$.ColmunValue'应为'$.ColumnValue'
  • 错误的模式定义(WITH子句(-我在输入JSON中看不到Name
  • 错误使用JSON_VALUE((-此函数从JSON字符串中提取标量值,因此JSON_VALUE([Students],'$.ColumnValue')lax模式下使用此JSON输入返回NULL

您可以尝试使用以下语句(基于问题中的语句(:

表:

CREATE TABLE PublicRelations (
StudentID int,
Students nvarchar(1000))
INSERT INTO PublicRelations (StudentID, Students) 
VALUES (1, N'[
{ "Label": "Name",     "ColumnValue": "Trudie" },      
{ "Label": "Class",    "ColumnValue": "PublicRelations" },      
{ "Label": "Room",     "ColumnValue": "8049" },      
{ "Label": "HttpPath", "ColumnValue": "https://www.google.com/" }
]')

声明:

SELECT p.StudentID, j.*
FROM [PublicRelations] p
CROSS APPLY OPENJSON(p.Students) WITH (
Name nvarchar(50) '$.Label',
Value nvarchar(255) '$.ColumnValue'
) j
WHERE EXISTS (
SELECT 1 
FROM OPENJSON(p.Students) WITH (Value nvarchar(255) '$.ColumnValue')
WHERE Value = N'Trudie'
) AND (j.Name IN ('Name', 'Class', 'Room'))

结果:

StudentID   Name     Value
1           Name     Trudie
1           Class    PublicRelations
1           Room     8049

最新更新