我正在使用 SQL Server 2014,并且知道它不支持 JSON。
我們從第 3 方供應商處接收資料,如下所示:
{
"PersonID": "1",
"MarketingPreference": "Allow",
"AllowPhone": "No",
"AllowEmail": "Yes",
"AllowTxt": "Yes",
"AllowMob": "Yes"
}
但是,我們有時也可能會收到以下資訊:
{
"PersonID": "2",
"MarketingPreference": "DoNotAllow"
}
我需要將這些值插入到表中 - 如果 SQL Server 2014 不支持 JSON,最好的方法是什么?
如果我將 JSON 轉換為 XML,則如下所示:
<PersonID>1</PersonID>
<MarketingPreference>Allow</MarketingPreference>
<AllowPhone>No</AllowPhone>
<AllowEmail>Yes</AllowEmail>
<AllowTxt>Yes</AllowTxt>
<AllowMob>Yes</AllowMob>
然后如何從 XML 中提取值?
DECLARE @xml XML
SET @xml = N'
<PersonID>1</PersonID>
<MarketingPreference>Allow</MarketingPreference>
<AllowPhone>No</AllowPhone>
<AllowEmail>Yes</AllowEmail>
<AllowTxt>Yes</AllowTxt>
<AllowMob>Yes</AllowMob>'
SELECT
Tab.Col.value('@PersonID','int') AS ContactID,
Tab.Col.value('@MarketingPreference','varchar(20)') AS Pref,
Tab.Col.value('@AllowPhone','varchar(20)') AS Phone,
Tab.Col.value('@AllowEmail','varchar(20)') AS Email,
Tab.Col.value('@AllowTxt','varchar(20)') AS Txt,
Tab.Col.value('@AllowMob','varchar(20)') AS Mob
FROM
@xml.nodes('/root/') Tab(Col)
GO;
但現在我得到這個錯誤:
'GO' 附近的語法不正確。
有沒有更簡單的方法從 JSON 中選擇值?
uj5u.com熱心網友回復:
您不需要GO(沒關系GO;哪個無效),并且您的 XML 語法似乎只是從您的第一個搜索結果中提取的?嘗試:
SELECT PersonID = x.p.value('(PersonID)[1]', 'int'),
MarkPref = x.p.value('(MarketingPreference)[1]', 'varchar(20)'),
AllowPhone = x.p.value('(AllowPhone)[1]','varchar(20)'),
AllowEmail = x.p.value('(AllowEmail)[1]','varchar(20)'),
AllowTxt = x.p.value('(AllowTxt)[1]', 'varchar(20)'),
AllowMob = x.p.value('(AllowMob)[1]', 'varchar(20)')
FROM @xml.nodes('.') AS x(p);
輸出:
| 個人ID | 標記首選項 | 允許電話 | 允許電子郵件 | 允許文本 | 允許暴徒 |
|---|---|---|---|---|---|
| 1 | 允許 | 不 | 是的 | 是的 | 是的 |
- 示例db<>fiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474596.html
下一篇:查找每個id的空值后的第一次出現
