FOR XML (AUTO,RAW)

本文介绍了如何在SQL中使用FOR XML AUTO, RAW等关键字生成XML格式的数据,包括如何设置根节点、列名、行名以及处理NULL值的情况。" 110386657,10351323,11月30日实验室日志:解密挑战,"['信息安全', '加密技术', '逆向工程', '编程', '解压密码']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*

通过使用FOR XML与一些关键字组合可以生成XML格式,经常使用的一些

关键字有AUTO, RAW, PATH or EXPLICIT。下面具体说明如何使用这些

关键字来生成XML。下面使用了ATUORAW方法来生车XML格式数据。

 

*/

 

/*

下面生成一张测试表

*/

 

--CREATE  TABLE Employees

--(

--    EmployeeID INT,

--    Name NVARCHAR(20),

--    Phone NVARCHAR(20),

--    SEX NVARCHAR(10)

--)

--INSERT INTO Employees

--SELECT 1, 'tudou', '15958944683',''  UNION ALL

--SELECT 2, 'shuige', '00000000000','' UNION ALL

--SELECT 3, 'xiaozhu', '11111111111',''

 

 

--1.生成xml最简单的方法是使用AUTO关键字

SELECT EmployeeID

,Name

,Phone

,SEX

FROM  Employees FOR XML AUTO

 

/*

<Employees EmployeeID="1" Name="tudou" Phone="15958944683" SEX="" />

<Employees EmployeeID="2" Name="shuige" Phone="00000000000" SEX="" />

<Employees EmployeeID="3" Name="xiaozhu" Phone="11111111111" SEX="" />

*/

 

 

--2.虽然上面查询返回的是XML格式,但是结果的类型不是XML类型,而是

--  NVARCHAR类型.要想返回XML类型需要使用TYPE关键字.

 

SELECT EmployeeID

,Name

,Phone

,SEX

FROM  Employees FOR XML AUTO,TYPE

 

--返回结果和上面一样

 

 

--3.默认情况下返回的值是作为属性,有时候需要返回的值作为节点。

--  需要使用关键ElementS

 

SELECT EmployeeID

,Name

,Phone

,SEX

FROM  Employees FOR XML AUTO,TYPE,Elements

 

/*

<Employees>

  <EmployeeID>1</EmployeeID>

  <Name>tudou</Name>

  <Phone>15958944683</Phone>

  <SEX></SEX>

</Employees>

<Employees>

  <EmployeeID>2</EmployeeID>

  <Name>shuige</Name>

  <Phone>00000000000</Phone>

  <SEX></SEX>

</Employees>

<Employees>

  <EmployeeID>3</EmployeeID>

  <Name>xiaozhu</Name>

  <Phone>11111111111</Phone>

  <SEX></SEX>

</Employees>

*/

 

 

--4.可能你会发现上面的结果没有根节点,那么就需要使用ROOT关键字。

 

SELECT EmployeeID

,Name

,Phone

,SEX

FROM  Employees FOR XML AUTO,TYPE,Elements,ROOT

 

/*

<root>

  <Employees>

    <EmployeeID>1</EmployeeID>

    <Name>tudou</Name>

    <Phone>15958944683</Phone>

    <SEX></SEX>

  </Employees>

  <Employees>

    <EmployeeID>2</EmployeeID>

    <Name>shuige</Name>

    <Phone>00000000000</Phone>

    <SEX></SEX>

  </Employees>

  <Employees>

    <EmployeeID>3</EmployeeID>

    <Name>xiaozhu</Name>

    <Phone>11111111111</Phone>

    <SEX></SEX>

  </Employees>

</root>

*/

 

--5.可能有时候你需要以别的名字来做根节点的名称那么如下:

 

SELECT EmployeeID

,Name

,Phone

,SEX

FROM  Employees FOR XML AUTO,TYPE,Elements,ROOT('优快云')

 

/*

<优快云>

  <Employees>

    <EmployeeID>1</EmployeeID>

    <Name>tudou</Name>

    <Phone>15958944683</Phone>

    <SEX></SEX>

  </Employees>

  <Employees>

    <EmployeeID>2</EmployeeID>

    <Name>shuige</Name>

    <Phone>00000000000</Phone>

    <SEX></SEX>

  </Employees>

  <Employees>

    <EmployeeID>3</EmployeeID>

    <Name>xiaozhu</Name>

    <Phone>11111111111</Phone>

    <SEX></SEX>

  </Employees>

</优快云>

*/

 

 

--6.上面我们看到如何为根制定一个名称,同样也可以为每列制定一个名称。

 

SELECT EmployeeID AS "编号"

,Name AS "姓名"

,Phone AS "电话"

,SEX AS "性别"

FROM  Employees FOR XML AUTO,TYPE,Elements,ROOT('优快云')

 

/*

<优快云>

  <Employees>

    <编号>1</编号>

    <姓名>tudou</姓名>

    <电话>15958944683</电话>

    <性别></性别>

  </Employees>

  <Employees>

    <编号>2</编号>

    <姓名>shuige</姓名>

    <电话>00000000000</电话>

    <性别></性别>

  </Employees>

  <Employees>

    <编号>3</编号>

    <姓名>xiaozhu</姓名>

    <电话>11111111111</电话>

    <性别></性别>

  </Employees>

</优快云>

*/

 

--7.上面我们看到为每列制定了一个名称,同样也可以为每行制定一个名称

--  AUTO默认是表名称,需要为表明指定一个别名。

 

SELECT EmployeeID AS "编号"

,Name AS "姓名"

,Phone AS "电话"

,SEX AS "性别"

FROM  Employees "员工" FOR XML AUTO,TYPE,Elements,ROOT('优快云')

 

/*

<优快云>

  <员工>

    <编号>1</编号>

    <姓名>tudou</姓名>

    <电话>15958944683</电话>

    <性别></性别>

  </员工>

  <员工>

    <编号>2</编号>

    <姓名>shuige</姓名>

    <电话>00000000000</电话>

    <性别></性别>

  </员工>

  <员工>

    <编号>3</编号>

    <姓名>xiaozhu</姓名>

    <电话>11111111111</电话>

    <性别></性别>

  </员工>

</优快云>

*/

 

 

--8.上面我们演示了通过给表指定别名来命名每行的元素名称,这样的方法是方便

--  但是有时候复杂的查询,别名很容易引起混乱。AUTO关键字不提供方法来命名

--  可以通过RAW关键字来轻松定义行名称

 

 

SELECT EmployeeID

,Name

,Phone

,SEX

FROM  Employees  FOR XML RAW('员工'),TYPE,Elements,ROOT('优快云')

 

/*

<优快云>

  <员工>

    <EmployeeID>1</EmployeeID>

    <Name>tudou</Name>

    <Phone>15958944683</Phone>

    <SEX></SEX>

  </员工>

  <员工>

    <EmployeeID>2</EmployeeID>

    <Name>shuige</Name>

    <Phone>00000000000</Phone>

    <SEX></SEX>

  </员工>

  <员工>

    <EmployeeID>3</EmployeeID>

    <Name>xiaozhu</Name>

    <Phone>11111111111</Phone>

    <SEX></SEX>

  </员工>

</优快云>

*/

 

--9.如果表中有列值为NULL的话,我们会发现XML会跳过该行的该列,不会

--  出现在XML中。

 

--来更新一个NULL查询生成XML看看

--UPDATE Employees SET SEX=NULL WHERE EmployeeID=1

 

SELECT EmployeeID

,Name

,Phone

,SEX

FROM  Employees  FOR XML RAW('员工'),TYPE,Elements,ROOT('优快云')

 

/*

<优快云>

  <员工>

    <EmployeeID>1</EmployeeID>

    <Name>tudou</Name>

    <Phone>15958944683</Phone>

  </员工>

  <员工>

    <EmployeeID>2</EmployeeID>

    <Name>shuige</Name>

    <Phone>00000000000</Phone>

    <SEX></SEX>

  </员工>

  <员工>

    <EmployeeID>3</EmployeeID>

    <Name>xiaozhu</Name>

    <Phone>11111111111</Phone>

    <SEX></SEX>

  </员工>

</优快云>

*/

 

 

--10.上面土豆的性别没有了,为了避免这样的情况发生我们需要使用XSINIL关键字

 

 

SELECT EmployeeID

,Name

,Phone

,SEX

FROM  Employees  FOR XML RAW('员工'),TYPE,Elements XSINIL,ROOT('优快云')

 

/*

<优快云 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <员工>

    <EmployeeID>1</EmployeeID>

    <Name>tudou</Name>

    <Phone>15958944683</Phone>

    <SEX xsi:nil="true" />

  </员工>

  <员工>

    <EmployeeID>2</EmployeeID>

    <Name>shuige</Name>

    <Phone>00000000000</Phone>

    <SEX></SEX>

  </员工>

  <员工>

    <EmployeeID>3</EmployeeID>

    <Name>xiaozhu</Name>

    <Phone>11111111111</Phone>

    <SEX></SEX>

  </员工>

</优快云>

*/

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值