Имеем XML:
Пробую так:
select top 100 ms.[stat].value('(status/message id/text())[1]', 'varchar(50)')
Ошибка:
XQuery [dbo.Statuses.stat.value()]: Syntax error near '[', expected a step expression.
Как правильно ее распарсить?
Спасибо
Ответ
Атрибуты запрашиваются так [stat].value('(/status/message/@id)[1]', 'char(10)')
Текст запрашивается так [stat].value('(/status/state/text())[1]', 'varchar(50)')
Пару слов о типах. Если varchar(n) - вернёт "правильную строку". char(n) - дополнит недостающие символы пробелами. Если int то в случае ошибки конвертирование в число - даст ошибку.
Как на mssql проверить быстро:
select
[stat].query('/status/message'),
[stat].value('(/status/state/text())[1]', 'varchar(50)')
from
(select
cast(
'
Вариант проще
declare @x xml
set @x = '1'
select @x.value('(/a/text())[1]','int')
Если хотите запросить ветку - использовать [stat].query('/status/message')
Полезные ссылки so-En msdn-примеры
Комментариев нет:
Отправить комментарий