Структура 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")]
но это не работает для любой комбинации паренов, запятых и т. Д., Которые я использую для создания переменной.