[英]How do I Extract All The XML Values from a Variable using SQL
我下面有XML變量,我想提取DATA中的所有值:
DECLARE @Xml XML = '<MetaData type="Contracts">
<Data column="PositionName">Administrator- Contract Compl</Data>
<Data column="PositionName">Administrator - Contract Compl</Data>
<Data column="PositionName">Dir - Contract Adm & Analytics</Data>
<Data column="PositionName">Director - Commercial Support</Data>
<Data column="PositionName">Lead Contract Admin - Compl</Data>
<Data column="PositionName">Lead Contract Administrator</Data>
<Data column="PositionName">Assoc- Contract Admin</Data>
<Data column="PositionName">Contract Administrator</Data>
<Data column="PositionName">Director- Contract Admin</Data>
<Data column="PositionName">Lead Contract Administrator</Data>
<Data column="PositionName">Manager- Contract Admin</Data>
<Data column="PositionName">Manager - Contract Admin</Data>
<Data column="PositionName">Rep - NGL Distribution</Data>
<Data column="PositionName">Supervisor- Contract Admin</Data>
<Data column="PositionName">VP- Contract Administration</Data>
<Data column="PositionName">Associate Contract Admin</Data>
<Data column="PositionName">Sr Manager - Contract Admin</Data>
<Data column="PositionName">Sr Specialist - Producer Svcs</Data>
<Data column="PositionName">Supervisor - Contract Admin</Data>
<Data column="PositionName">Supervisor - Contract Admin</Data>
<Data column="PositionName">VP - Contract Administration</Data>
</MetaData>';
-這失敗了
SELECT
x.v.value('Data[1]','VARCHAR(100)')
FROM @Xml.nodes('MetaData/Data') x(v)
我相信此查詢可以滿足您的要求:
SELECT
x.v.value('.','VARCHAR(100)')
FROM @Xml.nodes('MetaData/Data') x(v)
問題是使用'Data[1]'
將僅返回索引位置1處的元素,但返回'.'
將返回所有值。 另外,由於沒有“ MetaData / Data / Data [1]”節點,它的格式也有些不正確(這就是為什么以前獲得所有NULL
值的原因)。
請用這個
DECLARE @Xml XML = '<MetaData type="Contracts">
<Data column="PositionName">Administrator- Contract Compl</Data>
<Data column="PositionName">Administrator - Contract Compl</Data>
<Data column="PositionName">Dir - Contract Adm & Analytics</Data>
<Data column="PositionName">Director - Commercial Support</Data>
<Data column="PositionName">Lead Contract Admin - Compl</Data>
<Data column="PositionName">Lead Contract Administrator</Data>
<Data column="PositionName">Assoc- Contract Admin</Data>
<Data column="PositionName">Contract Administrator</Data>
<Data column="PositionName">Director- Contract Admin</Data>
<Data column="PositionName">Lead Contract Administrator</Data>
<Data column="PositionName">Manager- Contract Admin</Data>
<Data column="PositionName">Manager - Contract Admin</Data>
<Data column="PositionName">Rep - NGL Distribution</Data>
<Data column="PositionName">Supervisor- Contract Admin</Data>
<Data column="PositionName">VP- Contract Administration</Data>
<Data column="PositionName">Associate Contract Admin</Data>
<Data column="PositionName">Sr Manager - Contract Admin</Data>
<Data column="PositionName">Sr Specialist - Producer Svcs</Data>
<Data column="PositionName">Supervisor - Contract Admin</Data>
<Data column="PositionName">Supervisor - Contract Admin</Data>
<Data column="PositionName">VP - Contract Administration</Data>
</MetaData>'
DECLARE @m TABLE (Xmls XML)
INSERT INTO @m SELECT @XML
;WITH CTE AS
(
SELECT
p.value(N'.',N'nvarchar(MAX)') AS [Id]
FROM @m as x
OUTER APPLY x.Xmls.nodes(N'/MetaData/Data') AS u(p)
)
SELECT *
FROM CTE
輸出值
Id
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Administrator- Contract Compl
Administrator - Contract Compl
Dir - Contract Adm & Analytics
Director - Commercial Support
Lead Contract Admin - Compl
Lead Contract Administrator
Assoc- Contract Admin
Contract Administrator
Director- Contract Admin
Lead Contract Administrator
Manager- Contract Admin
Manager - Contract Admin
Rep - NGL Distribution
Supervisor- Contract Admin
VP- Contract Administration
Associate Contract Admin
Sr Manager - Contract Admin
Sr Specialist - Producer Svcs
Supervisor - Contract Admin
Supervisor - Contract Admin
VP - Contract Administration
(21 rows affected)
我也將您的代碼更改為可以工作。 您已經兩次提到數據
DECLARE @Xml XML = '<MetaData type="Contracts">
<Data column="PositionName">Administrator- Contract Compl</Data>
<Data column="PositionName">Administrator - Contract Compl</Data>
<Data column="PositionName">Dir - Contract Adm & Analytics</Data>
<Data column="PositionName">Director - Commercial Support</Data>
<Data column="PositionName">Lead Contract Admin - Compl</Data>
<Data column="PositionName">Lead Contract Administrator</Data>
<Data column="PositionName">Assoc- Contract Admin</Data>
<Data column="PositionName">Contract Administrator</Data>
<Data column="PositionName">Director- Contract Admin</Data>
<Data column="PositionName">Lead Contract Administrator</Data>
<Data column="PositionName">Manager- Contract Admin</Data>
<Data column="PositionName">Manager - Contract Admin</Data>
<Data column="PositionName">Rep - NGL Distribution</Data>
<Data column="PositionName">Supervisor- Contract Admin</Data>
<Data column="PositionName">VP- Contract Administration</Data>
<Data column="PositionName">Associate Contract Admin</Data>
<Data column="PositionName">Sr Manager - Contract Admin</Data>
<Data column="PositionName">Sr Specialist - Producer Svcs</Data>
<Data column="PositionName">Supervisor - Contract Admin</Data>
<Data column="PositionName">Supervisor - Contract Admin</Data>
<Data column="PositionName">VP - Contract Administration</Data>
</MetaData>'
SELECT
x.v.value('.','VARCHAR(100)')
FROM @Xml.nodes('/MetaData/Data') x(v)
輸出值
----------------------------------------------------------------------------------------------------
Administrator- Contract Compl
Administrator - Contract Compl
Dir - Contract Adm & Analytics
Director - Commercial Support
Lead Contract Admin - Compl
Lead Contract Administrator
Assoc- Contract Admin
Contract Administrator
Director- Contract Admin
Lead Contract Administrator
Manager- Contract Admin
Manager - Contract Admin
Rep - NGL Distribution
Supervisor- Contract Admin
VP- Contract Administration
Associate Contract Admin
Sr Manager - Contract Admin
Sr Specialist - Producer Svcs
Supervisor - Contract Admin
Supervisor - Contract Admin
VP - Contract Administration
(21 rows affected)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.