惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
Spread Privacy
Spread Privacy
T
Threatpost
C
Cisco Blogs
P
Palo Alto Networks Blog
AI
AI
Cyberwarzone
Cyberwarzone
NISL@THU
NISL@THU
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
T
Tor Project blog
Latest news
Latest news
AWS News Blog
AWS News Blog
D
Docker
S
SegmentFault 最新的问题
博客园 - 聂微东
WordPress大学
WordPress大学
Vercel News
Vercel News
S
Securelist
爱范儿
爱范儿
J
Java Code Geeks
Know Your Adversary
Know Your Adversary
S
Schneier on Security
Hugging Face - Blog
Hugging Face - Blog
F
Fortinet All Blogs
Last Week in AI
Last Week in AI
D
DataBreaches.Net
宝玉的分享
宝玉的分享
D
Darknet – Hacking Tools, Hacker News & Cyber Security
MongoDB | Blog
MongoDB | Blog
Engineering at Meta
Engineering at Meta
K
Kaspersky official blog
美团技术团队
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
量子位
博客园_首页
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
Google Online Security Blog
Google Online Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
腾讯CDC
T
Threat Research - Cisco Blogs
雷峰网
雷峰网
有赞技术团队
有赞技术团队
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy International News Feed
S
Security Affairs

博客园 - 挑战

从存储过程中读取相关信息 Blend Step by Step书籍笔记(第一章) WPF非轮询方式实时更新数据库变化SqlDependency 动态解析XAML文本构建WPF的UI 解决为'*********' 的游标已存在问题 数据表死锁查询和处理 SQL Server操作XML(五)XML Query-XQuery SQL Server操作XML(四)XML数据类型 SQL Server操作XML(三)OPENXML函数功能 SQL Server操作XML(二)XML子句实例 SQL Server操作XML(一)XML子句 数据绑定 最为详尽的WPF类继承关系 LinQ数据访问 WPF Diagram Designer Part 3:连接Item 照猫画虎WPF之二数据绑定 照猫画虎WPF之一:命名空间 解决WPF部署后客户端访问安全性问题 C#读取文本播放相应语音
SQL Server操作XML(六)XML FLOWR
挑战 · 2012-06-14 · via 博客园 - 挑战
  • 基于Query方法

declare @myDoc xml
set @myDoc = '
<bookstore>
  <book category="COOKING">
    <title>Everyday</title>
    <author>Giade De</author>
    <price>30.00</price>
  </book>
  <book category="COMPUTER">
    <title>Windows 2003</title>
    <author>Mike</author>
    <price>50.00</price>
  </book>
  <book category="SOFTWARE">
    <title>VS.NET2003</title>
    <author>Mike</author>
    <price>90.00</price>
  </book>
</bookstore>
'
--按照绝对路径/bookstore/book/title查询
select @myDoc.query('/bookstore/book/title')

显示结果:

<title>Everyday</title>
<title>Windows 2003</title>
<title>VS.NET2003</title>

--按照绝对路径/bookstore/book查询价格大于30并返回所有内容

select @myDoc.query('/bookstore/book[price>30]') 

显示结果:

<book category="COMPUTER">
  <title>Windows 2003</title>
  <author>Mike</author>
  <price>50.00</price>
</book>
<book category="SOFTWARE">
  <title>VS.NET2003</title>
  <author>Mike</author>
  <price>90.00</price>
</book>

 (1)For

--按照绝对路径/bookstore/book查询价格大于30并返回所有Title

select @myDoc.query('for $x in /bookstore/book
where $x/price>30
return $x/title')

显示结果:

<title>Windows 2003</title>
<title>VS.NET2003</title>

 --排序

select @myDoc.query('for $x in /bookstore/book/title
order by $x
return $x')

显示结果:

 <title>Everyday</title>

<title>VS.NET2003</title>
<title>Windows 2003</title>

 --格式化输出结果

select @myDoc.query('for $x in /bookstore/book/title
return <li>{data($x)}</li>')

显示结果:

<li>Everyday</li>
<li>Windows 2003</li>
<li>VS.NET2003</li>

  • 基于Value方法(返回单值)

declare @myDoc xml
set @myDoc = '
<bookstore>
  <book category="COOKING" id="1" >
    <title>Everyday</title>
    <author>Giade De</author>
    <price>30.00</price>
  </book>
  <book category="COMPUTER" id="2" >
    <title>Windows 2003</title>
    <author>Mike</author>
    <price>50.00</price>
  </book>
  <book category="SOFTWARE" id="3" >
    <title>VS.NET2003</title>
    <author>Mike</author>
    <price>90.00</price>
  </book>
</bookstore>

'

--查询绝对路径/bookstore/book/下第一条记录的id值

select @myDoc.value('(/bookstore/book/@id)[1]','int')

显示结果:1

  • 基于Exist方法(查询是否存在)

--查询绝对路径/bookstore/book/title下是否存在内容为VS.NET2003的记录 

select @myDoc.exist('/bookstore/book/title="VS.NET2003"')

--查询绝对路径/bookstore/book/下是否存在id为1的记录

select @myDoc.exist('/bookstore/book[@id=1]')

  • 基于Binding Relational列和变量(暂无)
  • 使用nodes方法转换XML输出(通常为关系型格式输出)

declare @myDoc xml
set @myDoc = '
<bookstore>
  <book category="COOKING" id="1" >
    <title>第一个</title>
    <author>Giade De</author>
    <price>30.00</price>
  </book>
    <book category="COOKING" id="1" >
    <title>第二个</title>
    <author>Giade De</author>
    <price>30.00</price>
  </book>
  <book category="COMPUTER" id="2" >
    <title>Windows 2003</title>
    <author>Mike</author>
    <price>50.00</price>
  </book>
  <book category="SOFTWARE" id="3" >
    <title>VS.NET2003</title>
    <author>Mike</author>
    <price>90.00</price>
  </book>
</bookstore>
'
--将其变为行模式,但是附带标签
select T.c.query('.')
from @myDoc.nodes('/bookstore/book/title') as T(c)
显示结果:

(无列名)
<title>第一个</title>
<title>第二个</title>
<title>Windows 2003</title>
<title>VS.NET2003</title>

--将其变为行模式,剔除标签,并剔除空值
declare @x xml
set @x = '
<root>
  <row id="1">
  <name>Lorry</name>
  <oflw>some text</oflw>
  </row>
  <row id="2">
    <name>Joe</name>
  </row>
  <row id="3">
  </row>
</root>'
--id为Attribute,所以用@;text为Element
select T1.rows.value('@id','int') as id,
       T1.rows.query('name/text()') as name
from @x.nodes('root/row') T1(rows)
--自连接
outer apply T1.rows.nodes('./name') as T2(names)
--筛除空值
where T2.names is not null

 显示结果:

 id    name

1    Lorry
2    Joe

  • 修改XML

1、INSERT
declare @doc xml
set @doc='<Products></Products>'

set @doc.modify(
'insert (<Product><ID>L01</ID><Name>LL01</Name></Product>)
into (/Products)[1]')

set @doc.modify(
'insert (<Product><ID>L02</ID><Name>LL02</Name></Product>)
as first into (/Products)[1]')

set @doc.modify(
'insert (<Product><ID>L03</ID><Name>LL03</Name></Product>)
as last into (/Products)[1]')

set @doc.modify(
'insert attribute Price {"20.50"} into (/Products/Product)[1]')

select @doc

显示结果:

<Products>
  <Product Price="20.50">
    <ID>L02</ID>
    <Name>LL02</Name>
  </Product>
  <Product>
    <ID>L01</ID>
    <Name>LL01</Name>
  </Product>
  <Product>
    <ID>L03</ID>
    <Name>LL03</Name>
  </Product>
</Products> 

------------------------------------------
2、DELETE
declare @myDoc xml
set @myDoc = '
<bookstore>
  <book category="COOKING" id="1" >
    <title>Everyday</title>
    <author>Giade De</author>
    <price>30.00</price>
  </book>
  <book category="COMPUTER" id="2" >
    <title>Windows 2003</title>
    <author>Mike</author>
    <price>50.00</price>
  </book>
  <book category="SOFTWARE" id="3" >
    <title>VS.NET2003</title>
    <author>Mike</author>
    <price>90.00</price>
  </book>
</bookstore>
'

--删除记录
--set @mydoc.modify('delete (/bookstore/book[@id="1"])')
--------------------------------------
--删除第i个满足条件的记录
set @mydoc.modify('delete (/bookstore/book[@id="1"])[2]')
select @myDoc
----------------------------------------
--删除单价标签和值
--set @mydoc.modify('delete (/bookstore/book/price)[1]')
----------------------------
--删除单价的数值,保留标签
set @mydoc.modify('delete (/bookstore/book/price/text())[1]')

-----------------------------
3、REPLACE
update text:
--将第i个记录的id值改为10

set @mydoc.modify('replace value of (/bookstore/book/@id)[2] with "10"')

--将第i个记录的price标签值值改为99.50

set @mydoc.modify('replace value of (/bookstore/book/price/text())[1] with "99.50"')
------------
set @mydoc.modify('
replace value of (/bookstore/book/@id)[1]
with(
if(/bookstore/book[@id="1"]) then
  "10"
else
  "100"
)
')