用T-SQL解析JSON

用T-SQL解析JSON,json,sql-server,tsql,pivot,open-json,Json,Sql Server,Tsql,Pivot,Open Json,我希望只选择JSON字符串中的每个值名称和值,并在SQL中转换为单独的列,这样我就可以轻松地将它们传递到powershell字符串中,以发送到外部API DECLARE @json NVARCHAR(MAX) SET @json='{ "InsertRecordData": { "data": { "AdditionalData": { "DataObjects": { "ObjData": { "Name": "coll_exclude", "Fields": { "Fiel

我希望只选择JSON字符串中的每个值名称和值,并在SQL中转换为单独的列,这样我就可以轻松地将它们传递到powershell字符串中,以发送到外部API

DECLARE @json NVARCHAR(MAX)

SET @json='{  "InsertRecordData": {  "data": {  "AdditionalData": {  "DataObjects": {  "ObjData": {  "Name": "coll_exclude",  "Fields": {  "FieldData1": {  "Name": "agreement",  "Value": "1234"  },  "FieldData2": {  "Name": "system",  "Value": "live"  },  "FieldData3": {  "Name": "date_added",  "Value": "2019-08-01"  },  "FieldData4": {  "Name": "time_added",  "Value": "11:20"  }  }  }  }  }  }  }  }';

SELECT *
FROM OPENJSON(@json,'$.InsertRecordData.data.AdditionalData.DataObjects.ObjData.Fields')
所以我想看看

Agreement   System    Date_added   time_added

1234           live      2019-08-01   11:20
使用mssql pivot()


太好了。。谢谢
DECLARE @json NVARCHAR(MAX)

SET @json='{  "InsertRecordData": {  "data": {  "AdditionalData": {  "DataObjects": {  "ObjData": {  "Name": "coll_exclude",  "Fields": {  "FieldData1": {  "Name": "agreement",  "Value": "1234"  },  "FieldData2": {  "Name": "system",  "Value": "live"  },  "FieldData3": {  "Name": "date_added",  "Value": "2019-08-01"  },  "FieldData4": {  "Name": "time_added",  "Value": "11:20"  }  }  }  }  }  }  }  }';


select [agreement], [system], [date_added], [time_added] from
(
    SELECT json_value(js.value, '$.Name') as Titles, json_value(js.value, '$.Value') as val
    FROM OPENJSON(@json,'$.InsertRecordData.data.AdditionalData.DataObjects.ObjData.Fields') as js) as SourceTb
PIVOT
(
    max(val)
    FOR Titles in ([agreement], [system], [date_added], [time_added])
) as PivotTable