久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

XML 到 SQL 的問題 - SQL Server

XML to SQL Issue - SQL Server(XML 到 SQL 的問題 - SQL Server)
本文介紹了XML 到 SQL 的問題 - SQL Server的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我試圖在 sql 腳本中獲取 xml 特定元素的位置,但我正在獲取特定元素的所有位置的詳細信息,因為我只是在尋找特定級別.

I am trying to get position of a specific element of xml in sql script , but I am getting details for all the positions of a specific element , where as I am looking for a particular level only.

這是代碼:

declare @xmlVar xml ='
<A specVersion="2.09">
  <B id="1" type="Regular">
    <C>
      <D>
        <E actioncode="A" date="06/13/2018 09:20" />
        <E  actioncode="B" date="06/13/2018 09:20" />
      </D>
      <D>
        <E actioncode="C" date="06/13/2018 09:20" />
      </D>
    </C>
  </B>

  <B id="2" type="Regular">
    <C>
      <D>
        <E  actioncode="D" date="06/13/2018 09:20" />
      </D>
    </C>
    <F>
        <D>
            <E  actioncode="F" date="06/13/2018 09:20" />
        </D>
    </F>
  </B>
</A>' ;

WITH Tally(Nmbr) AS
(
    SELECT TOP (SELECT @xmlVar.value(N'count(//D)','int'))
           ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) 
    FROM master..spt_values --just a pre-filled table with many rows
)
SELECT Nmbr
      ,e.value(N'@actioncode[1]','nvarchar(max)') AS Employee
FROM Tally
OUTER APPLY(SELECT  @xmlVar.query(N'//D').query(N'/D[sql:column("Nmbr")]')) AS B(ds)
OUTER APPLY ds.nodes(N'D/E') AS C(e);

以上查詢的結果:

1   A
1   B
2   C
3   D
4   F

預期輸出:

1 A
1 B
2 C
3 D

我正在尋找路徑 A->B->C->D 中所有 D 的位置,而不是其他路徑中的位置.

I am looking for positions of all D which comes in path A->B->C->D not the one's which come in other path.

推薦答案

好的,對于您之前的問題,這似乎是一個相當容易的更改.您可以使用相同的邏輯,但將其縮減為您想要查看的路徑:

Okay, this seems to be a rather easy change to your previous question. You can use the same logic, but reduce it to the path you want to see:

WITH Tally(Nmbr) AS
(
    SELECT TOP (SELECT @xmlVar.value(N'count(/A/B/C/D)','int'))
           ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) 
    FROM master..spt_values --just a pre-filled table with many rows
)
SELECT Nmbr
      ,e.value(N'@actioncode[1]','nvarchar(max)') AS Employee
FROM Tally
OUTER APPLY(SELECT  @xmlVar.query(N'/A/B/C/D').query(N'/D[sql:column("Nmbr")]')) AS B(ds)
OUTER APPLY ds.nodes(N'D/E') AS C(e);

更新:獲取

正如您所發現的,上述方法不能向后移動到 .試試這個:

WITH AllBs AS 
(
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS B_position
          ,b.value('@id','int') AS B_id
          ,b.query('.') AS B_node
    FROM @xmlVar.nodes('/A/B') AS A(b)
)
,AllDs As
(
    SELECT AllBs.*
          ,ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS D_position
          ,d.query('.') AS D_node 
    FROM AllBs 
    OUTER APPLY B_node.nodes('B/C/D') AS A(d)
)
SELECT AllDs.*
      ,e.value(N'@actioncode[1]','nvarchar(max)') AS Employee
FROM AllDs
OUTER APPLY D_node.nodes('D/E') AS A(e);

正如我在第一個答案中所寫的,排序順序存在很小的風險......但是使用 tally 表 的方法無法獲取第三次出現,因為 [sql:column()] 與任何父項重新編號.這意味著:第三個 是第二個 中的第一個.這就是為什么我將 .query() 放在中間......

As written in my first answer, there's a tiny risk about the sort order... But the approach with the tally table cannot fetch the 3rd occurance, because the position within [sql:column()] is re-numbered with any parent. That means: The 3rd <D> is the 1st in the 2nd <B>. That's why I placed the .query() in between...

這篇關于XML 到 SQL 的問題 - SQL Server的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Converting Every Child Tags in to a Single Column with multiple Delimiters -SQL Server (3)(將每個子標記轉換為具有多個分隔符的單列-SQL Server (3))
How can I create a view from more than one table?(如何從多個表創建視圖?)
Create calculated value based on calculated value inside previous row(根據前一行內的計算值創建計算值)
How do I stack the first two columns of a table into a single column, but also pair third column with the first column only?(如何將表格的前兩列堆疊成一列,但也僅將第三列與第一列配對?) - IT屋-程序員軟件開發技
Recursive t-sql query(遞歸 t-sql 查詢)
Convert Month Name to Date / Month Number (Combinations of Questions amp; Answers)(將月份名稱轉換為日期/月份編號(問題和答案的組合))
主站蜘蛛池模板: 一区二区三区欧美在线 | 国产成人精品一区二三区在线观看 | 亚洲综合激情 | 日本三级做a全过程在线观看 | 日韩一区二区三区视频在线播放 | 最新日韩欧美 | 国产视频久久久 | 欧美日韩电影一区二区 | 国产日韩一区二区三免费高清 | 99reav | 亚洲国产视频一区二区 | 91 久久| 97日日碰人人模人人澡分享吧 | 午夜免费视频 | 欧美黄色一区 | 色吧综合| 一区日韩 | 久久久精彩视频 | www.啪啪.com | 日本欧美在线视频 | 亚洲第一视频网站 | 99视频精品 | 国产一区二区三区免费 | 91高清在线观看 | 免费看91| 一区二区三区免费看 | 国产精品视频免费观看 | 亚洲狠狠| 欧美日韩国产一区二区三区 | 成人av免费看 | 国产一区二区电影 | 中文字幕av中文字幕 | 九九久久精品 | 69亚洲精品 | 国产一区二区在线视频 | 亚洲日韩中文字幕一区 | 国产日韩久久久久69影院 | 精品综合久久久 | 亚洲美女在线视频 | 蜜臀久久99精品久久久久久宅男 | 羞羞视频在线网站观看 |