作者cutekid (可爱小孩子)
看板Database
标题Re: [SQL ] 请教xml栏位节点筛选的问题
时间Tue Sep 18 13:04:45 2018
我参考以下网站来达成你要的:
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://webptt.com/cn.aspx?n=bbs/Database/M.1537247090.A.7D1.html
1F:推 YiMMiY: 感谢您~ 确实能达到目的 但资料量很大时会稍微花一点时间 09/21 23:42