SQL Server XML应用实例

/*

  Author: liangCK  小梁     

  Date  : 2008-11-19

*/

 

示例一: 如在一个 10/20/30 /50/40/90的字符串当中.需要得到前N”/”的字串,或得到前N”/”的和.如上的字符串.如果得到前3”/”的字符串.也就是10/20/30/,要得到前3”/”的数的和,就是60.这样的操作在以前通常会写一个函数,然后循环记数得到前N个字符串或前N个数的和.现在使用xml query,这样的操作将变得简单

 

--生成测试数据

DECLARE @t TABLE(data varchar(50))

INSERT @t VALUES(' 10/20/30 /50/40/90')

INSERT @t VALUES(' 1/2/3 /5/4/9')

INSERT @t VALUES(' 10/5/60 /33/12/1')

INSERT @t VALUES(' 10/8/3 /60/55/20')

 

DECLARE @i int;

--得到前N

SET @i=3

 

--1得到前N项的和

SELECT

    CAST(('<root><v>'

          +REPLACE(data,'/','</v><v>')

          +'</v></root>'

          ) AS xml).query('

                //v[position()<=sql:variable("@i")]').value('sum(v)','int')

FROM @t

 

/*

data

-----------

60

6

75

21

 

(4 行受影响)

 

原理:

10/20/30 /50/40/90生成一个

<root>

<v>10</v>

<v>20</v>

<v>30</v>

<v>50</v>

</root>

这样的数据

然后通过position()得到前几项.然后再通过sum进行求和

*/

 

--2.得到前N项的字符串

SELECT

    CAST((CAST(('<root><v>'

          +REPLACE(data,'/','</v><v>')

          +'</v></root>'

          )AS xml).query('

               //v[position()<=sql:variable("@i")]').query('for $i in //v

                                                             return concat(string($i),"/")'))

          AS varchar(30))

FROM @t

 

/*

原理跟上面的差不多

 

data

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

10/ 20/ 30 /

1/ 2/ 3 /

10/ 5/ 60 /

10/ 8/ 3 /

 

(4 行受影响)

 

*/

 

 

--示例二:对存储在数据库中的xml的某一个元素进行加密

/*

例如现在有一个这样的xml数据

<Persons>

<Person ID="123456">

      <Name>小梁</Name>

      <Age>20</Age>

      <Address>广东中山市石岐区</Address>

      <Zip>528400</Zip>

</Person>

</Persons>

*/

这样的一个xml数据.我需要对Address元素的text进行加密.而其它的可以显示供用户查看.

 

方法:通过xquery得到Address的元素值.然后再通过加密方法.(加密方法可以看我的另一文章

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值