久久久久久久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);

以上查詢的結(jié)果:

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);

更新:獲取

正如您所發(fā)現(xiàn)的,上述方法不能向后移動到 .試試這個:

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 表 的方法無法獲取第三次出現(xiàn),因為 [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...

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

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

相關(guān)文檔推薦

Converting Every Child Tags in to a Single Column with multiple Delimiters -SQL Server (3)(將每個子標記轉(zhuǎn)換為具有多個分隔符的單列-SQL Server (3))
How can I create a view from more than one table?(如何從多個表創(chuàng)建視圖?)
Create calculated value based on calculated value inside previous row(根據(jù)前一行內(nèi)的計算值創(chuàng)建計算值)
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屋-程序員軟件開發(fā)技
Recursive t-sql query(遞歸 t-sql 查詢)
Convert Month Name to Date / Month Number (Combinations of Questions amp; Answers)(將月份名稱轉(zhuǎn)換為日期/月份編號(問題和答案的組合))
主站蜘蛛池模板: 亚洲一一在线 | 99re6在线视频精品免费 | 精品伊人 | 日韩欧美三区 | 亚洲狠狠爱一区二区三区 | 九九综合九九 | 97国产精品视频人人做人人爱 | 亚洲欧美一区二区三区国产精品 | 天堂素人约啪 | 欧美一二三四成人免费视频 | 日韩图区 | 曰韩一二三区 | 伊人超碰| 成人午夜免费视频 | 久久精品亚洲精品国产欧美 | 天天操天天插 | 91av在线免费| 精品少妇一区二区三区在线播放 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 久久久精| 91av入口| 毛片网络 | 国产伦精品一区二区三区精品视频 | 天堂久久天堂综合色 | 日韩在线播放视频 | 色天堂影院 | 日韩欧美一级片 | 香蕉视频在线播放 | 久久国产精品-久久精品 | 久久精品一区二区三区四区 | 日韩久久久久久 | 成人免费一级视频 | 一区二区三区视频免费看 | 性色的免费视频 | 国产一级特黄视频 | 久久久久久高潮国产精品视 | 亚洲小视频在线观看 | 午夜电影日韩 | 国产一区二区三区久久 | 在线观看欧美一区 | 粉色午夜视频 |