SQL 服务器 2014 JSON 进入 table
SQL Server 2014 JSON into table
我正在使用 SQL Server 2014,我知道开箱即用它不支持 JSON。
我们正在从第三方供应商处接收数据,如下所示:
{
"PersonID": "1",
"MarketingPreference": "Allow",
"AllowPhone": "No",
"AllowEmail": "Yes",
"AllowTxt": "Yes",
"AllowMob": "Yes"
}
但是,我们有时也会收到以下信息:
{
"PersonID": "2",
"MarketingPreference": "DoNotAllow"
}
我需要将这些值插入 table - 如果 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;
但现在我得到这个错误:
Incorrect syntax near 'GO'.
是否有更简单的方法来 select 来自 JSON 的值?
您不需要 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);
输出:
PersonID
MarkPref
AllowPhone
AllowEmail
AllowTxt
AllowMob
1
Allow
No
Yes
Yes
Yes
我正在使用 SQL Server 2014,我知道开箱即用它不支持 JSON。
我们正在从第三方供应商处接收数据,如下所示:
{
"PersonID": "1",
"MarketingPreference": "Allow",
"AllowPhone": "No",
"AllowEmail": "Yes",
"AllowTxt": "Yes",
"AllowMob": "Yes"
}
但是,我们有时也会收到以下信息:
{
"PersonID": "2",
"MarketingPreference": "DoNotAllow"
}
我需要将这些值插入 table - 如果 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;
但现在我得到这个错误:
Incorrect syntax near 'GO'.
是否有更简单的方法来 select 来自 JSON 的值?
您不需要 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);
输出:
PersonID | MarkPref | AllowPhone | AllowEmail | AllowTxt | AllowMob |
---|---|---|---|---|---|
1 | Allow | No | Yes | Yes | Yes |