使用xQuery提取SQL变量中也存在的属性值
XML结构: ... ... ... ... 我有SQL,它将提取名为name的属性的值: 选择 选择“,”+CHAR13+P.N.value“@name”,“varcharmax” 来自myTable.message_xml.nodes的声明命名空间ns0=xxx:测试; ns0:消息/ns0:字段[@name=AAA或 @名称=BBB]“PN 对于XML路径,键入.value'substringtext[1],3','varcharmax'作为属性值 这将返回一个如下所示的列:使用xQuery提取SQL变量中也存在的属性值,sql,sql-server,xml,xpath,xquery,Sql,Sql Server,Xml,Xpath,Xquery,XML结构: ... ... ... ... 我有SQL,它将提取名为name的属性的值: 选择 选择“,”+CHAR13+P.N.value“@name”,“varcharmax” 来自myTable.message_xml.nodes的声明命名空间ns0=xxx:测试; ns0:消息/ns0:字段[@name=AAA或 @名称=BBB]“PN 对于XML路径,键入.value'substringtext[1],3','varcharmax'作为属性值 这将返回一个如下所示的列: ATTRIB
ATTRIBUTE_VALUES
---------------
AAA,
BBB
我的问题是潜在属性值的列表非常大。
我希望可以将其声明为一个变量,如:
声明@ATTRIBUTES VarCharMax
设置@ATTRIBUTES='AAA、BBB、CAR、XYZ'
然后将变量粘贴到sql中,如下所示:
[@name=sql:variable@ATTRIBUTES]
但这不适用于我用来构建变量的任何paren、逗号等组合。您可以使用contains函数。
声明一个变量,如下所示:
DECLARE @ATTRIBUTES VarChar(Max) = '|AAA|BBB|CAR|XYZ|';
在您的查询中,不要使用@name=AAA,而是使用:
太好了,我这边+1
contains(sql:variable("@ATTRIBUTES"), concat("|", @name, "|"))