sqlserver XML查询 字符串中传入变量

以下脚本演示了通过sql:variable()在解析字符串中传入变量,将xml中times为0、1、2、3下的数据依次解析并插入到测试表。

DECLARE @A XML ,
    @b INT ,
    @c INT;
SELECT  @c = 0;
SELECT  @A = '<roots>
<root times="0">
    <cam0>0</cam0>
    <cam1>1</cam1>
    <cam2>2</cam2>
    <cam3>3</cam3>
    <棉流效率>99.95</棉流效率>
</root>
<root times="1">
    <cam0>0</cam0>
    <cam1>1</cam1>
    <cam2>2</cam2>
    <cam3>3</cam3>
    <棉流效率>99.96</棉流效率>
</root>
<root times="2">
    <cam0>0</cam0>
    <cam1>1</cam1>
    <cam2>2</cam2>
    <cam3>3</cam3>
    <棉流效率>99.97</棉流效率>
</root>
<root times="3">
    <cam0>0</cam0>
    <cam1>1</cam1>
    <cam2>2</cam2>
    <cam3>3</cam3>
    <棉流效率>99.98</棉流效率>
</root>
<root times="4">
    <cam0>99</cam0>
    <cam1>98</cam1>
    <cam2>78</cam2>
    <cam3>878</cam3>
    <棉流效率>99.98</棉流效率>
</root>
</roots>
';

SET @b = ( SELECT   MAX(L.Y.value('@times', 'int'))
           FROM     @A.nodes('/roots/root') AS L ( Y )
         );
WHILE @c <= @b
    BEGIN
;
        WITH  CTE AS ( SELECT   @A.query('//root[@times=sql:variable("@c")]') AS BB
                     )
            INSERT  INTO dbo.测试
                    ( times ,
                      cam0 ,
                      cam1 ,
                      cam2 ,
                      cam3 ,
                      棉流效率
                    )
                    SELECT  @c AS times ,
                            L.Y.value('cam0[1]', 'int') AS cam0 ,
                            L.Y.value('cam1[1]', 'int') AS cam1 ,
                            L.Y.value('cam2[1]', 'int') AS cam2 ,
                            L.Y.value('cam3[1]', 'INT') AS cam3 ,
                            L.Y.value('棉流效率[1]', 'decimal(5,2)') AS 棉流效率
                    FROM    CTE
                            CROSS APPLY CTE.BB.nodes('/root') AS L ( Y );
        SET @c = @c + 1;
    END;

最后的查询结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值