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")]
但这不适用于我用来构建变量的括号、逗号等的任何组合。