前一章已经讲了一些关于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)')