Ответ 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)
Марк
У меня есть столбец 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 [значение()]: атрибут верхнего уровня узлы не поддерживаются
Джон Сондерс почти прав: -)
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)
Марк
Если вы не знаете корневой элемент:
select @Data.value('(/*/@foo)[1]','varchar(20)') as Foo