簡體   English   中英

如何從不同節點的 XML 中獲取數據作為 SQL Server 中的列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM