SQL XML 查询整理

只整理了一些还不是很完全,以后会继续补全。

--=======

--XML

--=======

 

--1.modify()

DECLARE @x XML

SELECT @x = '<People NAME="dongsheng" SEX=""/>'

DECLARE @SEX NVARCHAR(10)

SELECT @SEX = ''

SET @x.modify('    replace value of (/People/@SEX)[1]     with sql:variable("@SEX")')

SELECT @x

 

/*output:<People NAME="dongsheng" SEX="" />*/

 

 

--2.delete()

DECLARE @x XML

SELECT @x = '<People NAME="dongsheng" SEX=""/>'

SET @x.modify('    delete (/People/@SEX)[1] ')

SELECT @x

/*output:<People NAME="dongsheng" />*/

 

 

--3.insert() attribute

 

DECLARE @x XML

SELECT @x = '<People NAME="dongsheng" />'

DECLARE @SEX VARCHAR(15)

SELECT @SEX = ''

SET @x.modify('    insert attribute SEX {sql:variable("@SEX")} as last into   

(/People)[1]')

SELECT @x

/*output:<People NAME="dongsheng" SEX="" />*/

 

--4.insert() element

DECLARE @x XML

SELECT @x ='<People NAME="dongsheng" />'

DECLARE @SEX VARCHAR(15)

SELECT @SEX = ''

SET @x.modify('    insert element SEX {sql:variable("@SEX")} as last into   

(/People)[1]')

SELECT @x

/*

output:    <People NAME="dongsheng">

         <SEX></SEX>

       </People>

*/

 

 

 

--5.读取XML

 

 

--下面为多种方法从XML中读取EMAIL

 

DECLARE @x XML

SELECT @x = '

<People>

    <dongsheng>

        <Info Name="Email">[email protected]</Info>

        <Info Name="Phone">678945546</Info>

        <Info Name="qq">36575</Info>

    </dongsheng>

</People>'

 

-- 方法1

SELECT @x.value('data(/People/dongsheng/Info[@Name="Email"])[1]', 'varchar(30)')

 

-- 方法2

SELECT @x.value('(/People/dongsheng/Info[@Name="Email"])[1]', 'varchar(30)')

 

-- 方法3

SELECT

    C.value('.','varchar(30)')

FROM @x.nodes('/People/dongsheng/Info[@Name="Email"]') T(C)

 

-- 方法4

SELECT

    C.value('(Info[@Name="Email"])[1]','varchar(30)')

FROM @x.nodes('/People/dongsheng') T(C)

 

-- 方法5

SELECT

    C.value('(dongsheng/Info[@Name="Email"])[1]','varchar(30)')

FROM @x.nodes('/People') T(C)

 

-- 方法6

SELECT

    C.value('.','varchar(30)')

FROM @x.nodes('/People/dongsheng/Info') T(C)

WHERE C.value('(.[@Name="Email"])[1]','varchar(30)') IS NOT NULL

 

-- 方法7

SELECT

    C.value('.','varchar(30)')

FROM @x.nodes('/People/dongsheng/Info') T(C)

WHERE C.exist('(.[@Name="Email"])[1]') = 1

 

 

 

--6.Reading values from an XML variable

DECLARE @x XML

SELECT @x = 

'<Peoples>

    <People  Name="tudou" Sex="" />

    <People  Name="choushuigou" Sex=""/>

    <People  Name="dongsheng" Sex="" />

</Peoples>'

 

SELECT

    v.value('@Name[1]','VARCHAR(20)') AS Name,

    v.value('@Sex[1]','VARCHAR(20)') AS Sex

FROM @x.nodes('/Peoples/People') x(v)

 

/*

Name                 Sex

-------------------- --------------------

tudou               

choushuigou         

dongsheng           

 

(3 行受影响) 

*/

 

 

--7.多属性过滤

 

 

 

DECLARE @x XML

SELECT @x = '

<Employees>

  <Employee id="1234" dept="IT" type="合同工">

    <Info NAME="dongsheng" SEX="" QQ="5454545454"/>

  </Employee>

  <Employee id="5656" dept="IT" type="临时工">

    <Info NAME="土豆" SEX="" QQ="5345454554"/>

  </Employee>

  <Employee id="3242" dept="市场" type="合同工">

    <Info NAME="choushuigou" SEX="" QQ="54543545"/>

  </Employee>

</Employees>'

 

--查询deptIT的人员信息

    --方法1

    SELECT

       C.value('@NAME[1]','VARCHAR(10)') AS NAME,

       C.value('@SEX[1]','VARCHAR(10)') AS SEX,

       C.value('@QQ[1]','VARCHAR(20)') AS QQ

    FROM @x.nodes('/Employees/Employee[@dept="IT"]/Info') T(C)

    /*

    NAME      SEX        QQ

    ---------- ---------- --------------------

    dongsheng           5454545454

    土豆               5345454554

    */

 

    --方法2

    SELECT

       C.value('@NAME[1]','VARCHAR(10)') AS NAME,

       C.value('@SEX[1]','VARCHAR(10)') AS SEX,

       C.value('@QQ[1]','VARCHAR(20)') AS QQ

    FROM @x.nodes('//Employee[@dept="IT"]/*') T(C)

    /*

    NAME      SEX        QQ

    ---------- ---------- --------------------

    dongsheng           5454545454

    土豆               5345454554

    */

 

--查询出IT部门typePermanent的员工

 

SELECT

    C.value('@NAME[1]','VARCHAR(10)') AS NAME,

    C.value('@SEX[1]','VARCHAR(10)') AS SEX,

    C.value('@QQ[1]','VARCHAR(20)') AS QQ

FROM @x.nodes('//Employee[@dept="IT"][@type="合同工"]/*') T(C)

/*

    NAME      SEX        QQ

    ---------- ---------- --------------------

    dongsheng           5454545454

     

*/

 

--8.通过变量定位和修改属性

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值