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

推荐订阅源

Cyberwarzone
Cyberwarzone
V
Vulnerabilities – Threatpost
T
Tenable Blog
Forbes - Security
Forbes - Security
Simon Willison's Weblog
Simon Willison's Weblog
AWS News Blog
AWS News Blog
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
S
Securelist
C
Cybersecurity and Infrastructure Security Agency CISA
Project Zero
Project Zero
C
CXSECURITY Database RSS Feed - CXSecurity.com
V
Visual Studio Blog
WordPress大学
WordPress大学
Latest news
Latest news
K
Kaspersky official blog
T
Tailwind CSS Blog
T
Threat Research - Cisco Blogs
B
Blog RSS Feed
C
Cisco Blogs
博客园 - 聂微东
Martin Fowler
Martin Fowler
T
The Blog of Author Tim Ferriss
小众软件
小众软件
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
L
LINUX DO - 热门话题
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Privacy International News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
S
SegmentFault 最新的问题
Security Latest
Security Latest
Y
Y Combinator Blog
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
P
Privacy & Cybersecurity Law Blog
L
LINUX DO - 最新话题
月光博客
月光博客
The GitHub Blog
The GitHub Blog
博客园 - 三生石上(FineUI控件)
S
Security Affairs
P
Proofpoint News Feed
D
DataBreaches.Net
有赞技术团队
有赞技术团队
云风的 BLOG
云风的 BLOG

博客园 - 挑战

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

 原始数据:

 (1)非元素Raw模式联合查询

SELECT P.Product_Name,P.ListPrice,S.Quantity
FROM Products P
JOIN Sales S
ON S.Product_ID=P.Product_ID
FOR XML RAW

 显示结果

<row Product_Name="Dell笔记本" ListPrice="3500.00" Quantity="100" />
<row Product_Name="Apple笔记本" ListPrice="5000.00" Quantity="220" />
<row Product_Name="HP笔记本" ListPrice="400.00" />

(2)非元素Auto模式联合查询

SELECT P.Product_Name,P.ListPrice,S.Quantity
FROM Products P
JOIN Sales S
ON S.Product_ID=P.Product_ID
FOR XML AUTO

显示结果

<P Product_Name="Dell笔记本" ListPrice="3500.00">
  <S Quantity="100" />
</P>
<P Product_Name="Apple笔记本" ListPrice="5000.00">
  <S Quantity="220" />
</P>
<P Product_Name="HP笔记本" ListPrice="400.00">
  <S />
</P>

 (3)元素Raw模式联合查询

SELECT P.Product_Name,P.ListPrice,S.Quantity
FROM Products P
JOIN Sales S
ON S.Product_ID=P.Product_ID
FOR XML RAW,elements

显示结果

<row>
  <Product_Name>Dell笔记本</Product_Name>
  <ListPrice>3500.00</ListPrice>
  <Quantity>100</Quantity>
</row>
<row>
  <Product_Name>Apple笔记本</Product_Name>
  <ListPrice>5000.00</ListPrice>
  <Quantity>220</Quantity>
</row>
<row>
  <Product_Name>HP笔记本</Product_Name>
  <ListPrice>400.00</ListPrice>
</row>

(4)元素Auto模式联合查询

SELECT P.Product_Name,P.ListPrice,S.Quantity
FROM Products P
JOIN Sales S
ON S.Product_ID=P.Product_ID
FOR XML AUTO,elements

显示结果

<P>
  <Product_Name>Dell笔记本</Product_Name>
  <ListPrice>3500.00</ListPrice>
  <S>
    <Quantity>100</Quantity>
  </S>
</P>
<P>
  <Product_Name>Apple笔记本</Product_Name>
  <ListPrice>5000.00</ListPrice>
  <S>
    <Quantity>220</Quantity>
  </S>
</P>
<P>
  <Product_Name>HP笔记本</Product_Name>
  <ListPrice>400.00</ListPrice>
  <S />
</P>

(5)空值支持

SELECT P.Product_Name,P.ListPrice,S.Quantity
FROM Products P
JOIN Sales S
ON S.Product_ID=P.Product_ID
FOR XML RAW,elements xsinil

显示结果:

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Product_Name>Dell笔记本</Product_Name>
  <ListPrice>3500.00</ListPrice>
  <Quantity>100</Quantity>
</row>
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Product_Name>Apple笔记本</Product_Name>
  <ListPrice>5000.00</ListPrice>
  <Quantity>220</Quantity>
</row>
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Product_Name>HP笔记本</Product_Name>
  <ListPrice>400.00</ListPrice>
  <Quantity xsi:nil="true" />
</row>

 (6)子查询,Type应用

SELECT Product_Name,ListPrice,
(SELECT Quantity
FROM Sales
WHERE Products.Product_ID=Sales.Product_ID
FOR XML RAW )
FROM Products
FOR XML AUTO

显示结果

不能将未命名的表用作 XML 标识符,也不能将未命名的列用于属性名称。请在 SELECT 语句中使用 AS 对未命名的列/表进行命名

 因为不指定的话,返回子查询是字符串,必须利用Type指定

SELECT Product_Name,ListPrice,
(SELECT Quantity
FROM Sales
WHERE Products.Product_ID=Sales.Product_ID
FOR XML RAW,TYPE)
FROM Products
FOR XML AUTO

显示结果:

<Products Product_Name="Dell笔记本" ListPrice="3500.00">
  <row Quantity="100" />
</Products>
<Products Product_Name="Apple笔记本" ListPrice="5000.00">
  <row Quantity="220" />
</Products>
<Products Product_Name="HP笔记本" ListPrice="400.00">
  <row />
  <row Quantity="300" />
</Products>

 (7)XML格式化

利用EXPLICIT显式格式化XML

select
1 as tag,
null as parent,
Product_Name  as [产品!1!名称!xml],
ListPrice  as [产品!1!价格!xml]
from Products
for xml EXPLICIT

显式结果:

<产品>
  <名称>Dell笔记本</名称>
  <价格>3500.00</价格>
</产品>
<产品>
  <名称>Apple笔记本</名称>
  <价格>5000.00</价格>
</产品>
<产品>
  <名称>HP笔记本</名称>
  <价格>400.00</价格>
</产品>

更为简单地,可以使用PATH代替

select
Product_Name  as "产品/名称",
ListPrice  as "产品/价格"
from Products
for xml  path

注意: AS后:  '@ID' 表示是一个Attribute

                      Name

                      详细/名称

                      详细/test()

 

 (8)如果生成XML文件,需要Root节点

select
Product_Name  as "产品/名称",
ListPrice  as "产品/价格"
from Products
for xml path ,root('root')

显示结果

<root>
  <row>
    <产品>
      <名称>Dell笔记本</名称>
      <价格>3500.00</价格>
    </产品>
  </row>
  <row>
    <产品>
      <名称>Apple笔记本</名称>
      <价格>5000.00</价格>
    </产品>
  </row>
  <row>
    <产品>
      <名称>HP笔记本</名称>
      <价格>400.00</价格>
    </产品>
  </row>
</root>