Передайте значение параметра SQL для выбора данных xml

#sql #xml

#sql #xml

Вопрос:

Код:

 DECLARE @dataxml XML = CONVERT(xml ,'<Parentnode><childnode><id>1</id></childnode></Parentnode>')

DECLARE @childnode  VARCHAR(50) 
SET @childnode = (SELECT DISTINCT 
                      r.value('fn:local-name(.)', 'nvarchar(50)') as t 
                  FROM @dataxml.nodes('//Parentnode/*') AS records(r))

SELECT @childnode

SELECT
   t.value('id[1]', 'int') AS id 
FROM
   @dataxml.nodes('/Parentnode/*[local-name(.)=sql:variable("@childnode")]/*') AS XD(t)
  

Выходные данные возвращаются как NULL , но они должны сопровождаться значением id в xml

Что не так в этом коде?

Ответ №1:

Вам просто нужно удалить /* символы в конце вашей последней строки, вот так:

 @dataxml.nodes('/Parentnode/*[local-name(.)=sql:variable("@childnode")]') AS XD(t)
  

Также мне пришлось удалить $ символ в конце FROM ключевого слова, но я предполагаю, что это может быть просто опечаткой. Я тестировал это SQL Server 2012.