Re: [SQL ] 請教xml欄位節點篩選的問題
我參考以下網站來達成你要的:
1. Examples of using XQuery to update XML Data in SQL Server
https://bit.ly/2OzSGJs
2. 節點的本機名稱的相關函式
https://bit.ly/2NiGEro
----------------------
SQL如下:
select *
into #data
from Table1
--「not」 運算子是我 try 出來的,用一般寫程式的邏輯取反向
update t1
set XmlData.modify('delete /root/*[not(local-name() = ("BBB","CCC"))]')
from #data
select * from #data
※ 引述《YiMMiY (YiMMiY)》之銘言:
: MS SQL - 2012
: 各位好
: 現在有一張蠻單純的資料表
: Table1
: {
: Pkey nvachar(max)
: XmlData xml
: }
: 假設資料內容
: Pkey XmlData
: ---------------------------------------
: One <root attr1="One" attr2="XXX">
: <AAA> aaaOne </AAA>
: <BBB> bbbOne </BBB>
: <CCC> ccc1One </CCC>
: <CCC att="2"> ccc2One </CCC>
: <DDD> dddOne </DDD>
: <root>
: Two <root attr1="Two" attr2="XXX">
: <AAA> aaaTwo </AAA>
: <BBB> bbbTwo </BBB>
: <CCC> ccc1Two </CCC>
: <CCC att="2"> ccc2Two </CCC>
: <DDD> dddTwo </DDD>
: <root>
: ...後面還有很多筆
: 現在我想撈BBB CCC,加上查詢條件(EX:Pkey='One' OR Pkey='Two')
: SELECT Pkey, XmlData.query('/root/BBB , /root/CCC ') AS XmlData FROM Table1
: WHERE Pkey='One' OR Pkey='Two'
: 會得到
: Pkey XmlData
: ---------------------------------------
: One <BBB> bbbOne </BBB>
: <CCC> ccc1One </CCC>
: <CCC att="2"> ccc2One </CCC>
: Two <BBB> bbbTwo </BBB>
: <CCC> ccc1Two </CCC>
: <CCC att="2"> ccc2Two </CCC>
: 但我希望是能得到
: Pkey XmlData
: ---------------------------------------
: One <root attr1="One" attr2="XXX">
: <BBB> bbbOne </BBB>
: <CCC> ccc1One </CCC>
: <CCC att="2"> ccc2One </CCC>
: <root>
: Two <root attr1="Two" attr2="XXX">
: <BBB> bbbTwo </BBB>
: <CCC> ccc1Two </CCC>
: <CCC att="2"> ccc2Two </CCC>
: <root>
: 也就是包完整的XML路徑
: 請問該如何查詢?
: 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.168.22.20
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1537247090.A.7D1.html
推
09/21 23:42,
6年前
, 1F
09/21 23:42, 1F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章