看板 Database 關於我們 聯絡資訊
我參考以下網站來達成你要的: 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
YiMMiY: 感謝您~ 確實能達到目的 但資料量很大時會稍微花一點時間 09/21 23:42