JSON_MODIFY在SQL Server 2017中无法正常工作
这是我的密码:JSON_MODIFY在SQL Server 2017中无法正常工作,sql,sql-server,sql-server-2017,Sql,Sql Server,Sql Server 2017,这是我的密码: DECLARE @info NVARCHAR(MAX) = '{"searchQuery":{"reportType":"ReportedHcEcg"},"pageQuery":{"pageNumber":1,"pageSize":10,"sortColumnName":"Urgent, UploaDateTime","sortOrder":"Desc"}}' SET @info = JSON_MODIFY(@info, '$.searchQuery.reportType', N
DECLARE @info NVARCHAR(MAX) = '{"searchQuery":{"reportType":"ReportedHcEcg"},"pageQuery":{"pageNumber":1,"pageSize":10,"sortColumnName":"Urgent, UploaDateTime","sortOrder":"Desc"}}'
SET @info = JSON_MODIFY(@info, '$.searchQuery.reportType', NULL)
SELECT @info
当我试图删除代码第二行中的reportType
字段时,我的输出应该是通过从searchQuery
中删除reportType
得到的
{"searchQuery":{},"pageQuery":{"pageNumber":1,"pageSize":10,"sortColumnName":"Urgent, UploaDateTime","sortOrder":"Desc"}}
{"searchQuery":{"pageSize":10,"sortColumnName":"Urgent, UploaDateTime","sortOrder":"Desc"}}
而不是像下面这样
{"searchQuery":{},"pageQuery":{"pageNumber":1,"pageSize":10,"sortColumnName":"Urgent, UploaDateTime","sortOrder":"Desc"}}
{"searchQuery":{"pageSize":10,"sortColumnName":"Urgent, UploaDateTime","sortOrder":"Desc"}}
我无法理解SQL Server的这种行为。有什么帮助吗?这里有一个解决方法:将子对象提取、编辑并替换为对象
DECLARE @info NVARCHAR(MAX) = '{"searchQuery":{"reportType":"ReportedHcEcg"},"pageQuery":{"pageNumber":1,"pageSize":10,"sortColumnName":"Urgent, UploaDateTime","sortOrder":"Desc"}}'
SET @info = JSON_MODIFY(@info, '$.searchQuery', JSON_MODIFY(JSON_QUERY(@info, '$.searchQuery'), '$.reportType', NULL))
SELECT @info
这看起来真像个虫子。最小的repro:
SELECT JSON_-MODIFY({“a”:{“b”:“}”,c”:{“d”:“e”:“}}”,以及“$.a.b',NULL)
是{“a”:{“e”:“}}
,而SELECT JSON_-MODIFY({“a”:{“b”:“},c”:{“d”:“},$.a.b',NULL)
(注意:第二个对象上只有一个属性)给出了正确的{“a”,“c”:。如果路径中使用了strict
,这两种情况都会正确地将a.b
设置为null
,因此似乎只删除缺火。此外,只有在尝试删除对象的唯一属性时才会失败:SELECT JSON_MODIFY(“{”a:“{”b:“,“c:“}”,“d:{”e:““f:“}}”,“$.a.b”,null)
生成正确的{a:{c:“}”,d:{e:“,”f:“}}}
,并选择JSON_MODIFY({a:{b:“,”c:“,”d:{e:“,”f:“}”,NULL)
生成{a:{b:“,”d:{e:“,”f“,”f:}
。这就提出了一些(相当复杂的)解决方法,通过添加虚拟成员和测试空性来解决问题。当然看起来像个bug。很高兴找到你们。我添加了一个@jeroenmoster示例。