Sql Server 取xml中节点值(传参)

前一章已经讲了一些关于xml取值的方法

这次讲一下,关于xml.value()方法中传参。

如果直接拼接  @data.value('xxxx'+@fieldValue+'xxxx','varchar(max)')

报错:XML 数据类型方法 "value" 的参数 1 必须是字符串文字

 正确方式:

sql:variable("参数")

举例:

-- 测试数据
declare @data xml
set @data='<sourceCode>
    <rules>
        <rule code="InvalidCode" enabled="true">
            <details>
                <codeDescriptionList>
                    <codeDescription code="JC" description="JOYCE" />
                    <codeDescription code="SW" description="SEAN" />
                    <codeDescription code="JLA" description="JUNO" />
                    <codeDescription code="GW1" description="GEENA" />
                </codeDescriptionList>
            </details>
        </rule>
        <rule code="CreateEvent" enabled="false">
            <details>
                <CreateEventRuleCode>Z00</CreateEventRuleCode>
            </details>
        </rule>
        <rule code="DateTimeFormat" enabled="false">
            <details>
                <format>Short</format>
            </details>
        </rule>
        <rule code="CheckEntered" enabled="false">
            <details />
        </rule>
    </rules>
</sourceCode>'

-- 测试传参
declare @fieldValue varchar(100)='JC'
-- 查询语句
select @data.value('((//rules/rule/details/codeDescriptionList/codeDescription[@code=sql:variable("@fieldValue")])[1]/@description)[1]','varchar(max)')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值