Openxml. Как уже говорилось в первой части этой статьи [6], при использовании функции openxml можно было не указывать структуру и типы полей результирующей выборки

Как уже говорилось в первой части этой статьи [6], при использовании функции openxml можно было не указывать структуру и типы полей результирующей выборки, опуская ключевое слово with. В этом случае результат возвращался в так называемом edge table формате. Например,

declare @h intexec sp_xml_preparedocument @h out, '<a><b/></a>'select * from openxml(@h, '/')exec sp_xml_removedocument @h

Возвращает:

id parentid nodetype localname prefix namespaceuri datatype prev text-- -------- -------- --------- ------ ------------ -------- ---- ----0 NULL 1 a NULL NULL NULL NULL NULL2 0 1 b NULL NULL NULL NULL NULL

Теперь можно получать доступ к внутренней информации, использующейся в процессе создания edge table, при формировании структуры результирующей выборки. Это делается с помощью атрибутов метасвойств (metaproperty attributes), которые находятся в пространстве имен urn:schemas-microsoft-com:xml-metaprop, которому назначен префикс mp. Список всех метаатрибутов я приводить не буду: достаточно взглянуть на шапку предыдущей таблицы. Вот пример их использования:

declare @h intexec sp_xml_preparedocument @h out, '<a attr="it is"><b>text1</b><b>text2</b></a>'select * from openxml(@h, '/a/b|/a')with(nodeid int '@mp:id', parentid int '@mp:parentid', nodename varchar(10) '@mp:localname', text1 varchar(100) '../@attr', text2 varchar(100) 'text()')exec sp_xml_removedocument @h

Здесь выбирается три строки - два элемента b и элемент а. Вот результат:

nodeid parentid nodename text1 text2------ -------- -------- ----- -----0 NULL a NULL NULL3 0 b it is text14 0 b it is text2

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: