Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON_MODIFY在SQL Server 2017中无法正常工作_Sql_Sql Server_Sql Server 2017 - Fatal编程技术网

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示例。