这是我的Json字符串:
{
"JobID":1005,
"ItemID":2,
"Prefix":"CC",
"Version":1,
"ItemTypeID":4,
"ItemType":"Change Control",
"StageID":3,
"StageName":"Change Control Closure",
"WorkflowID":1,
"WorkflowName":"Change Control Workflow",
"JobStatus":0,
"IsJobArchived":false,
"IsJobCanceled":false,
"IsJobOnHold":false,
"IsJobPhasedOut":false,
"RelationID":0,
"JobLastUpdatedBy":"G4Admin",
"JobStartDate":"2019-07-18T08:02:44.737718Z",
"JobLastUpdated":"2019-07-18T08:02:44.9857249Z",
"JobDueDate":"2019-07-23T08:02:44.8997205Z",
"JobEstimatedDate":"2019-07-23T08:02:44.8877188Z",
"JobCompletedDate":null,
"RevisionNumber":1,
"DocketNo":390,
"JobVariance":"0",
"Mappings":[
],
"Groups":[
12
],
"InactiveGroups":null,
"Attributes":[
{
"ID":22,
"Name":"WorkflowType",
"Value":"50",
"DataType":"Text",
"IsMaster":true,
"ItemData":true,
"IsUserGroup":false,
"GroupId":null,
"ValueString":"Change Control",
"InactiveValue":null,
"InactiveValueString":null
},
{
"ID":18,
"Name":"Reason for change",
"Value":"23",
"DataType":"Text",
"IsMaster":true,
"ItemData":true,
"IsUserGroup":false,
"GroupId":null,
"ValueString":"CMC change",
"InactiveValue":null,
"InactiveValueString":null
},
{
"ID":12,
"Name":"Market",
"Value":"12",
"DataType":"Text",
"IsMaster":true,
"ItemData":true,
"IsUserGroup":true,
"GroupId":null,
"ValueString":"Ireland",
"InactiveValue":null,
"InactiveValueString":null
},
{
"ID":14,
"Name":"Product Name",
"Value":"34",
"DataType":"Text",
"IsMaster":true,
"ItemData":true,
"IsUserGroup":false,
"GroupId":null,
"ValueString":"DROXIA",
"InactiveValue":null,
"InactiveValueString":null
},
{
"ID":13,
"Name":"CCDS Impacted?",
"Value":"15",
"DataType":"Text",
"IsMaster":true,
"ItemData":true,
"IsUserGroup":false,
"GroupId":null,
"ValueString":"No",
"InactiveValue":null,
"InactiveValueString":null
},
{
"ID":11,
"Name":"JobOwner",
"Value":"G4Admin",
"DataType":"Text",
"IsMaster":false,
"ItemData":true,
"IsUserGroup":false,
"GroupId":null,
"ValueString":"G4Admin",
"InactiveValue":null,
"InactiveValueString":null
},
{
"ID":50,
"Name":"PartNumber",
"Value":"CC-02-01",
"DataType":0,
"IsMaster":false,
"ItemData":false,
"IsUserGroup":false,
"GroupId":null,
"ValueString":"CC-02-01",
"InactiveValue":null,
"InactiveValueString":null
},
{
"ID":50,
"Name":"JobInitiator",
"Value":"G4Admin",
"DataType":0,
"IsMaster":false,
"ItemData":false,
"IsUserGroup":false,
"GroupId":null,
"ValueString":"G4Admin",
"InactiveValue":null,
"InactiveValueString":null
},
{
"ID":10,
"Name":"TaskLeft",
"Value":"3",
"DataType":0,
"IsMaster":false,
"ItemData":false,
"IsUserGroup":false,
"GroupId":null,
"ValueString":null,
"InactiveValue":null,
"InactiveValueString":null
},
{
"ID":4,
"Name":"ProofCycle",
"Value":"1",
"DataType":"Integer",
"IsMaster":false,
"ItemData":true,
"IsUserGroup":false,
"GroupId":null,
"ValueString":"1",
"InactiveValue":null,
"InactiveValueString":null
},
{
"ID":5,
"Name":"PassCycle",
"Value":"1",
"DataType":"Integer",
"IsMaster":false,
"ItemData":true,
"IsUserGroup":false,
"GroupId":null,
"ValueString":"1",
"InactiveValue":null,
"InactiveValueString":null
},
{
"ID":6,
"Name":"TotalPassCount",
"Value":"1",
"DataType":"Integer",
"IsMaster":false,
"ItemData":true,
"IsUserGroup":false,
"GroupId":null,
"ValueString":"1",
"InactiveValue":null,
"InactiveValueString":null
}
],
"LinkedParentJobs":[
],
"LinkedChildJobs":[
],
"FullText":null
}
我想更新属性中的数组...
示例:我想更改属性where Name = ProofCycle
中的值。
想要一种通过Json_Modify
函数更新json的动态方式。
我有一些查询要拉平json,但是json_Modify
不能更改数组中的值
DECLARE @KeyValue NVARCHAR(MAX) = '{"JobID":1005,"ItemID":2,"Prefix":"CC","Version":1,"ItemTypeID":4,"ItemType":"Change Control","StageID":3,"StageName":"Change Control Closure","WorkflowID":1,"WorkflowName":"Change Control Workflow","JobStatus":0,"IsJobArchived":false,"IsJobCanceled":false,"IsJobOnHold":false,"IsJobPhasedOut":false,"RelationID":0,"JobLastUpdatedBy":"G4Admin","JobStartDate":"2019-07-18T08:02:44.737718Z","JobLastUpdated":"2019-07-18T08:02:44.9857249Z","JobDueDate":"2019-07-23T08:02:44.8997205Z","JobEstimatedDate":"2019-07-23T08:02:44.8877188Z","JobCompletedDate":null,"RevisionNumber":1,"DocketNo":390,"JobVariance":"0","Mappings":[],"Groups":[12],"InactiveGroups":null,"Attributes":[{"ID":22,"Name":"WorkflowType","Value":"50","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"Change Control","InactiveValue":null,"InactiveValueString":null},{"ID":18,"Name":"Reason for change","Value":"23","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"CMC change","InactiveValue":null,"InactiveValueString":null},{"ID":12,"Name":"Market","Value":"12","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":true,"GroupId":null,"ValueString":"Ireland","InactiveValue":null,"InactiveValueString":null},{"ID":14,"Name":"Product Name","Value":"34","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"DROXIA","InactiveValue":null,"InactiveValueString":null},{"ID":13,"Name":"CCDS Impacted?","Value":"15","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"No","InactiveValue":null,"InactiveValueString":null},{"ID":11,"Name":"JobOwner","Value":"G4Admin","DataType":"Text","IsMaster":false,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"G4Admin","InactiveValue":null,"InactiveValueString":null},{"ID":50,"Name":"PartNumber","Value":"CC-02-01","DataType":0,"IsMaster":false,"ItemData":false,"IsUserGroup":false,"GroupId":null,"ValueString":"CC-02-01","InactiveValue":null,"InactiveValueString":null},{"ID":50,"Name":"JobInitiator","Value":"G4Admin","DataType":0,"IsMaster":false,"ItemData":false,"IsUserGroup":false,"GroupId":null,"ValueString":"G4Admin","InactiveValue":null,"InactiveValueString":null},{"ID":10,"Name":"TaskLeft","Value":"3","DataType":0,"IsMaster":false,"ItemData":false,"IsUserGroup":false,"GroupId":null,"ValueString":null,"InactiveValue":null,"InactiveValueString":null},{"ID":4,"Name":"ProofCycle","Value":"1","DataType":"Integer","IsMaster":false,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"1","InactiveValue":null,"InactiveValueString":null},{"ID":5,"Name":"PassCycle","Value":"1","DataType":"Integer","IsMaster":false,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"1","InactiveValue":null,"InactiveValueString":null},{"ID":6,"Name":"TotalPassCount","Value":"1","DataType":"Integer","IsMaster":false,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"1","InactiveValue":null,"InactiveValueString":null}],"LinkedParentJobs":[],"LinkedChildJobs":[],"FullText":null}'
SELECT
-- Change Value to 80 where Name = 'Passcycle'
JSON_MODIFY(@KeyValue, '$.Attributes', '80')
我得到一个空输出。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
说明:
您可以使用"Attributes" JSON
路径表达式访问和修改$.Attributes[x].Value
数组中的项目,其中x
是该项目的索引。您需要将此路径表达式传递给JSON_MODIFY。因此,这里一种可能的方法是生成并执行动态语句。但是,如果您使用SQL Server 2017+,则可以提供一个变量作为此路径表达式的值。
动态语句(SQL Server 2016 +):
DECLARE @KeyValue NVARCHAR(MAX) = N'{"JobID":1005,"ItemID":2,"Prefix":"CC","Version":1,"ItemTypeID":4,"ItemType":"Change Control","StageID":3,"StageName":"Change Control Closure","WorkflowID":1,"WorkflowName":"Change Control Workflow","JobStatus":0,"IsJobArchived":false,"IsJobCanceled":false,"IsJobOnHold":false,"IsJobPhasedOut":false,"RelationID":0,"JobLastUpdatedBy":"G4Admin","JobStartDate":"2019-07-18T08:02:44.737718Z","JobLastUpdated":"2019-07-18T08:02:44.9857249Z","JobDueDate":"2019-07-23T08:02:44.8997205Z","JobEstimatedDate":"2019-07-23T08:02:44.8877188Z","JobCompletedDate":null,"RevisionNumber":1,"DocketNo":390,"JobVariance":"0","Mappings":[],"Groups":[12],"InactiveGroups":null,"Attributes":[{"ID":22,"Name":"WorkflowType","Value":"50","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"Change Control","InactiveValue":null,"InactiveValueString":null},{"ID":18,"Name":"Reason for change","Value":"23","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"CMC change","InactiveValue":null,"InactiveValueString":null},{"ID":12,"Name":"Market","Value":"12","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":true,"GroupId":null,"ValueString":"Ireland","InactiveValue":null,"InactiveValueString":null},{"ID":14,"Name":"Product Name","Value":"34","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"DROXIA","InactiveValue":null,"InactiveValueString":null},{"ID":13,"Name":"CCDS Impacted?","Value":"15","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"No","InactiveValue":null,"InactiveValueString":null},{"ID":11,"Name":"JobOwner","Value":"G4Admin","DataType":"Text","IsMaster":false,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"G4Admin","InactiveValue":null,"InactiveValueString":null},{"ID":50,"Name":"PartNumber","Value":"CC-02-01","DataType":0,"IsMaster":false,"ItemData":false,"IsUserGroup":false,"GroupId":null,"ValueString":"CC-02-01","InactiveValue":null,"InactiveValueString":null},{"ID":50,"Name":"JobInitiator","Value":"G4Admin","DataType":0,"IsMaster":false,"ItemData":false,"IsUserGroup":false,"GroupId":null,"ValueString":"G4Admin","InactiveValue":null,"InactiveValueString":null},{"ID":10,"Name":"TaskLeft","Value":"3","DataType":0,"IsMaster":false,"ItemData":false,"IsUserGroup":false,"GroupId":null,"ValueString":null,"InactiveValue":null,"InactiveValueString":null},{"ID":4,"Name":"ProofCycle","Value":"1","DataType":"Integer","IsMaster":false,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"1","InactiveValue":null,"InactiveValueString":null},{"ID":5,"Name":"PassCycle","Value":"1","DataType":"Integer","IsMaster":false,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"1","InactiveValue":null,"InactiveValueString":null},{"ID":6,"Name":"PassCycle","Value":"1","DataType":"Integer","IsMaster":false,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"1","InactiveValue":null,"InactiveValueString":null}],"LinkedParentJobs":[],"LinkedChildJobs":[],"FullText":null}'
DECLARE @stm nvarchar(max) = N''
SELECT @stm = @stm + CONCAT(
'SELECT @KeyValue = JSON_MODIFY(@KeyValue, ''$.Attributes[',
[key],
'].Value'', ''80''); '
)
FROM OPENJSON(@keyValue, '$.Attributes')
WHERE JSON_VALUE([value], '$.Name') = N'PassCycle'
EXECUTE sp_executesql @stm, N'@KeyValue NVARCHAR(MAX) OUTPUT', @KeyValue OUTPUT
使用变量作为path
表达式(SQL Server 2017 +):
DECLARE @KeyValue NVARCHAR(MAX) = N'{"JobID":1005,"ItemID":2,"Prefix":"CC","Version":1,"ItemTypeID":4,"ItemType":"Change Control","StageID":3,"StageName":"Change Control Closure","WorkflowID":1,"WorkflowName":"Change Control Workflow","JobStatus":0,"IsJobArchived":false,"IsJobCanceled":false,"IsJobOnHold":false,"IsJobPhasedOut":false,"RelationID":0,"JobLastUpdatedBy":"G4Admin","JobStartDate":"2019-07-18T08:02:44.737718Z","JobLastUpdated":"2019-07-18T08:02:44.9857249Z","JobDueDate":"2019-07-23T08:02:44.8997205Z","JobEstimatedDate":"2019-07-23T08:02:44.8877188Z","JobCompletedDate":null,"RevisionNumber":1,"DocketNo":390,"JobVariance":"0","Mappings":[],"Groups":[12],"InactiveGroups":null,"Attributes":[{"ID":22,"Name":"WorkflowType","Value":"50","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"Change Control","InactiveValue":null,"InactiveValueString":null},{"ID":18,"Name":"Reason for change","Value":"23","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"CMC change","InactiveValue":null,"InactiveValueString":null},{"ID":12,"Name":"Market","Value":"12","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":true,"GroupId":null,"ValueString":"Ireland","InactiveValue":null,"InactiveValueString":null},{"ID":14,"Name":"Product Name","Value":"34","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"DROXIA","InactiveValue":null,"InactiveValueString":null},{"ID":13,"Name":"CCDS Impacted?","Value":"15","DataType":"Text","IsMaster":true,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"No","InactiveValue":null,"InactiveValueString":null},{"ID":11,"Name":"JobOwner","Value":"G4Admin","DataType":"Text","IsMaster":false,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"G4Admin","InactiveValue":null,"InactiveValueString":null},{"ID":50,"Name":"PartNumber","Value":"CC-02-01","DataType":0,"IsMaster":false,"ItemData":false,"IsUserGroup":false,"GroupId":null,"ValueString":"CC-02-01","InactiveValue":null,"InactiveValueString":null},{"ID":50,"Name":"JobInitiator","Value":"G4Admin","DataType":0,"IsMaster":false,"ItemData":false,"IsUserGroup":false,"GroupId":null,"ValueString":"G4Admin","InactiveValue":null,"InactiveValueString":null},{"ID":10,"Name":"TaskLeft","Value":"3","DataType":0,"IsMaster":false,"ItemData":false,"IsUserGroup":false,"GroupId":null,"ValueString":null,"InactiveValue":null,"InactiveValueString":null},{"ID":4,"Name":"ProofCycle","Value":"1","DataType":"Integer","IsMaster":false,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"1","InactiveValue":null,"InactiveValueString":null},{"ID":5,"Name":"PassCycle","Value":"1","DataType":"Integer","IsMaster":false,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"1","InactiveValue":null,"InactiveValueString":null},{"ID":6,"Name":"PassCycle","Value":"1","DataType":"Integer","IsMaster":false,"ItemData":true,"IsUserGroup":false,"GroupId":null,"ValueString":"1","InactiveValue":null,"InactiveValueString":null}],"LinkedParentJobs":[],"LinkedChildJobs":[],"FullText":null}'
SELECT @KeyValue = JSON_MODIFY(@KeyValue, '$.Attributes[' + [key] + '].Value', '80')
FROM OPENJSON(@keyValue, '$.Attributes')
WHERE JSON_VALUE([value], '$.Name') = N'PassCycle'
注释:
两个示例都将修改条件为JSON
的{{1}}数组中的所有项目(不仅是一项)。