T-SQL извлекает атрибут sql из xml, используя переменную
Я пытаюсь извлечь атрибут XML из переменной XML, передавая имя нужного атрибута. Первый оператор select отлично работает, получая правильные значения атрибутов. Однако, когда я пытаюсь установить в переменной SQL желаемое имя атрибута, все, что отображается, это строка /root/attribs/@id
вместо фактической стоимости. Я пробовал многочисленные перестановки @path
переменная, все безрезультатно.
Что мне здесь не хватает?
DECLARE @XMLString XML = '<root><attribs flags="1" id="test_id" platform="test_platform" /></root>';
SELECT
flags = x.c.value('(/root/attribs/@flags)[1]', 'nvarchar(50)') ,
id = x.c.value('(/root/attribs/@id)[1]', 'nvarchar(50)') ,
[platform] = x.c.value('(/root/attribs/@platform)[1]', 'nvarchar(50)')
FROM
@XMLString.nodes('/*') x ( c );
DECLARE @Path NVARCHAR(50) = '/root/attribs/@id';
SELECT
result = x.c.value('(sql:variable("@Path"))[1]', 'nvarchar(50)')
FROM
@XMLString.nodes('/*') x ( c );
1 ответ
Это позволит вам указать имя атрибута.
DECLARE @XMLString xml = '
<root>
<attribs flags="1" id="test_id" platform="test_platform" />
</root>'
DECLARE @Attribute nvarchar(max) = 'flags'
SELECT
t.x.value('(/root/attribs/@*[local-name() = sql:variable("@Attribute")])[1]', 'nvarchar(max)')
FROM @XMLString.nodes('/*') t(x)