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

17

У меня есть столбец 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 [значение ()]: атрибут верхнего уровня   узлы не поддерживаются

    
задан Alex Argo 20.04.2009 в 22:38
источник

2 ответа

37

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

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)

Марк

    
ответ дан marc_s 20.04.2009 в 23:05
источник
3

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

select @Data.value('(/*/@foo)[1]','varchar(20)') as Foo
    
ответ дан bojidar alexandrov 21.02.2013 в 16:40
источник