Как выбрать атрибут верхнего уровня столбца xml в SQL Server 2005? - PullRequest
21 голосов
/ 21 апреля 2009

У меня есть столбец xml в SQL Server 2005, который эквивалентен:

<Test foo="bar">
  <Otherstuff baz="belch" />
</Test>

Я хочу иметь возможность получить значение атрибута foo Test (корневой элемент) как varchar. Моей целью было бы что-то вроде:

select cast( '<Test foo="bar"><Otherstuff baz="belch" /></Test>' as xml).value('@foo','varchar(20)') as Foo

Когда я запускаю вышеуказанный запрос, я получаю следующую ошибку:

Сообщение 2390, уровень 16, состояние 1, строка 1 XQuery [value ()]: атрибут верхнего уровня узлы не поддерживаются

Ответы [ 2 ]

43 голосов
/ 21 апреля 2009

Джон Сондерс понял это почти правильно: -)

declare @Data XML
set @Data = '<Test foo="bar"><Otherstuff baz="belch" /></Test>'

select @Data.value('(/Test/@foo)[1]','varchar(20)') as Foo

Это работает для меня (SQL Server 2005 и 2008)

Марк

5 голосов
/ 21 февраля 2013

Если вы не знаете корневой элемент:

select @Data.value('(/*/@foo)[1]','varchar(20)') as Foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...