XML结构:
<ns0:message xmlns:ns0='xxx:testing'>
<ns0:field name='AAA'>...</ns0:field>
<ns0:field name='BBB'>...</ns0:field>
<ns0:field name='VVV'>...</ns0:field>
<ns0:field name='CAR'>...</ns0:field>
</ns0:message>
我有SQL,它将提取名为
name
的属性的值:SELECT
( (SELECT ',' + CHAR(13) + P.N.value('@name', 'varchar(max)')
FROM myTable.message_xml.nodes('declare namespace ns0="xxx:testing";
ns0:message/ns0:field[ @name = "AAA" or
@name = "BBB"]') P(N)
FOR XML PATH(''), type).value('substring(text()[1], 3)', 'varchar(max)')) as ATTRIBUTE_VALUES
这将返回如下所示的列:
ATTRIBUTE_VALUES
---------------
AAA,
BBB
我的问题是潜在属性值的列表很大。
我希望在查询中不对要检查的每个属性值重复
@name = "AAA"
,而是希望将其声明为变量,例如:DECLARE @ATTRIBUTES VarChar(Max)
SET @ATTRIBUTES = '(AAA,BBB,CAR,XYZ)'
然后只需将变量粘贴在sql中即可:
[@name = sql:variable("@ATTRIBUTES")]
但这不适用于我用来构建变量的括号,逗号等的任何组合。
最佳答案
您可以使用contains
功能。
像这样声明一个变量:
DECLARE @ATTRIBUTES VarChar(Max) = '|AAA|BBB|CAR|XYZ|';
在查询中而不是
@name = "AAA"
使用:contains(sql:variable("@ATTRIBUTES"), concat("|", @name, "|"))
关于sql - 使用xQuery提取SQL变量中也存在的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56915360/