Реферат: Использование XML совместно с SQL
Выражение attribute::totalposts означает, что для поля totalposts будет использоваться значение одноименного атрибута. Гораздо чаще в XPath-выражениях используется сокращенная запись:
«attribute::» можно заменить символом @;
«self::node()» можно заменить на точку (.);
«parent::node()» можно заменить на две точки (..).
Другие сокращения можно найти в спецификации XPath.
Давайте рассмотрим более сложный пример: выберем название форума, модератора и дату создания статистики для всех форумов, у которых больше 6000 сообщений.
exec sp_xml_preparedocument @hdoc out, @_xmlbody select forum as 'Форум', case when moders is null then 'нет' else moders end as 'Модератор', [date] as 'Датасоздания' from openxml(@hdoc,'/rsdn/forums/forum[attribute::totalposts > "6000"]') with ( moders varchar(50) 'moderators/moderator/attribute::name', forum varchar(50) 'attribute::name', [date] varchar(50) 'parent::node()/attribute::date' ) exec sp_xml_removedocument @hdoc |
Часть запроса, использующую XPath, можно переписать в сокращенной форме :
openxml(@hdoc,'/rsdn/forums/forum[@totalposts > "6000"]') with ( moders varchar(50) 'moderators/moderator/@name', forum varchar(50) '@name', [date] varchar(50) '../@date' ) |
Везде далее я буду пользоваться сокращенной записью.