SQL Server XML анализирует атрибуты первого узла - PullRequest
2 голосов
/ 31 октября 2011

У меня есть столбец XML в базе данных, который может выглядеть так:

<sql-connection-info name="myname" server="(local)\SQLEXPRESS" other-attribute="value" />

<oracle-connection-info name="othername" server="address" other-attribute="value" />

и так далее.Имена узлов и атрибутов могут быть почти любыми.Мне нужно перебрать пару атрибут / значение на первом узле.Каждый образец, который я видел, был для известных имен узлов / атрибутов.

Когда я пытался использовать

@xmlColumn.query("/@*")

, я получаю эту ошибку

XQuery [query ()]: узлы атрибутов верхнего уровня не поддерживаются.

Возможно ли это в TSQL?Если да, как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 31 октября 2011
declare @xmlColumn xml = '<sql-connection-info name="myname" server="(local)\SQLEXPRESS" other-attribute="value" />'

select T.N.value('local-name(.)', 'varchar(max)') as Name,
       T.N.value('.', 'varchar(max)') as Value
from @xmlColumn.nodes('//@*') as T(N)

Результат:

Name              Value
----------------  -------------------
name              myname
server            (local)\SQLEXPRESS
other-attribute   value
1 голос
/ 31 октября 2011

Вы можете использовать

@xmlColumn.query("/node()[1]")

, чтобы получить первый узел каждой записи. node() соответствует любому элементному узлу. Из твоего поста я не понимаю, хочешь ли ты е. г. name атрибут первого узла вашей записи. Тогда вы будете использовать:

@xmlColumn.query("/node()[1]/@name")
...