[英]How to fetch data from XML with different nodes as column in SQL Server
我有一個 XML,我試圖從 XML 中按表名選擇行,但每個節點上的列數都不同。
下面是我的 XML:
<tables>
<table>
<name>Table1</name>
<attr>
<id>1</id>
<col1>123</col1>
<col2>345</col2>
</attr>
<attr>
<id>2</id>
<col3>123</col3>
</attr>
<attr>
<id>4</id>
<col2>123</col2>
</attr>
</table>
</tables>
現在我通過以下查詢進行查詢:
SELECT T.N.VALUE('id','nvarchar(100)') as id,
T.N.VALUE('col1','nvarchar(100)') as col1,
T.N.VALUE('col2','nvarchar(100)') as col2,
T.N.VALUE('col3','nvarchar(100)') as col3
FROM @input.nodes('/tables/table/attr') AS T(N)
CROSS APPLY @input.nodes('/tables/table/name') AS S(N)
WHERE S.N.value('name','varchar(100)')='Table1'
但我收到一個錯誤
XQuery [value()]: 'value()' 需要一個單例(或空序列),找到類型為 'xdt:untypedAtomic *' 的操作數
但我期待得到:
id | col1 | col2 | col3
---+------+------+------
1 | 123 | 345 | NULL
2 | NULL | NULL | 123
4 | NULL | 123 | NULL
像這樣:
declare @input xml = '<tables>
<table>
<name>Table1</name>
<attr>
<id>1</id>
<col1>123</col1>
<col2>345</col2>
</attr>
<attr>
<id>2</id>
<col3>123</col3>
</attr>
<attr>
<id>4</id>
<col2>123</col2>
</attr>
</table>
</tables>
'
SELECT a.N.value('(id)[1]','nvarchar(100)') as id,
a.N.value('(col1)[1]','nvarchar(100)') as col1,
a.N.value('(col2)[1]','nvarchar(100)') as col2,
a.N.value('(col3)[1]','nvarchar(100)') as col3
FROM @input.nodes('/tables/table') AS t(N)
CROSS APPLY T.N.nodes('attr') AS a(N)
WHERE t.N.value('(name)[1]','varchar(100)')='Table1'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.