Подтвердить что ты не робот

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

У меня есть столбец 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

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

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

4b9b3361

Ответ 1

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

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)

Марк

Ответ 2

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

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