Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции SQL Server.docx
Скачиваний:
49
Добавлен:
24.09.2019
Размер:
4.09 Mб
Скачать

Хранимые процедуры для управления внутренним представлением дерева

Создание дерева с помощью хранимой процедуры sp_xml_preparedocument

Считывает входной XML-текст, проводит его синтаксический анализ при помощи синтаксического анализатора MSXML (Msxmlsql.dll) и выдает проанализированный документ, готовый к потреблению. Проанализированный документ является древовидным представлением различных узлов в XML-документе: элементов, атрибутов, текста, комментариев и т. д.

Процедура sp_xml_preparedocument возвращает дескриптор, по которому можно обратиться к вновь созданному внутреннему представлению XML-документа. Дескриптор действует только в течение сеанса либо до тех пор, пока не будет аннулирован путем выполнения процедуры sp_xml_removedocument.

Синтаксис:

sp_xml_preparedocument

hdoc OUTPUT

[ , xmltext ]

[ , xpath_namespaces ]

Параметры:

hdoc

Дескриптор вновь созданного документа. Аргумент hdoc является целым числом.

xmltext ]

Исходный XML-документ. Средство синтаксического анализа MSXML анализирует этот XML-документ. Аргумент xmltex является текстовым параметром: char, nchar, varchar, nvarchar, text, ntext или xml. Значение по умолчанию равно NULL. В этом случае создается внутреннее представление пустого XML-документа.

xpath_namespaces ]

Указывает объявления пространства имен, которые используются в выражениях XPath строк и столбцов в OPENXML. Аргумент xpath_namespaces является текстовым параметром: char, nchar, varchar, nvarchar, text, ntext или xml.

Значения кодов возврата: 0 (успешное завершение) или >0 (неуспешное завершение)

Разрешения: необходимо быть членом роли public.

Процедура sp_xml_preparedocument может обрабатывать только текст или нетипизированный XML. Если значение экземпляра, передающееся в качестве входного параметра, уже является типизированным XML, его сначала необходимо привести к новому нетипизированному экземпляру XML или к строке, после чего его можно передавать в качестве входного параметра.

Следующий пример показывает, как использовать системную хранимую процедуру sp_xml_preparedocument, для анализа XML документа, переданного другой пользовательской хранимой процедуре.

CREATE PROC ProcessOrder @doc xml

AS

DECLARE @hdoc integer

EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc

Удаление дерева с использованием sp_xml_removedocument

SQL Server хранит разобранные документы во внутреннем кэше. Чтобы избежать переполнения памяти, используйте системную хранимую процедуру sp_xml_removedocument, чтобы освободить дескриптор документа и уничтожить древовидную структуру, когда она больше не нужна. Вы должны вызвать sp_xml_removedocument в том же самом пакете запросов, что и процедуру sp_xml_preparedocument, которая сгенерировала дерево. Это необходимо потому, что параметр hdoc, используемый для указания на дерево, является локальной переменной, и если произойдет выход из области его видимости, то удалить это дерево из памяти станет невозможно.

Следующий пример показывает, как использовать системную хранимую процедуру sp_xml_removedocument:

EXEC sp_xml_removedocument @hdoc

OPENXML (Transact-SQL)

OPENXML предоставляет представление набора строк XML-документа. Так как OPENXML является поставщиком наборов строк, OPENXML применяться в инструкциях языка Transact-SQL, в которых могут быть использованы поставщики наборов строк, такие как таблицы, представления или функция OPENROWSET.

 Синтаксис

OPENXML( idoc int [ in] , rowpattern nvarchar [ in ] , [ flags byte [ in ] ] )

[ WITH ( SchemaDeclaration | TableName ) ]

 Аргументы

idoc

Дескриптор документа внутреннего представления XML-документа. Внутреннее представление XML-документа создается при помощи вызова процедуры sp_xml_preparedocument.

rowpattern

Шаблон XPath, используемый для идентификации узлов (в XML-документе, дескриптор которого передается в аргумент idoc), которые будут обработаны как строки.

flags

Указывает на сопоставление, которое должно использоваться между XML-данными и реляционным набором строк, а также на порядок заполнения переполненного столбца. Аргумент flags является необязательным входным параметром и может принимать одно из следующих значений.

Байтовое значение

Описание

0

По умолчанию используется атрибутивная модель сопоставления.

1

Использовать атрибутивную модель сопоставления. Может быть совмещено с XML_ELEMENTS. В этом случае, атрибутивная модель сопоставления применяется в первую очередь, а потом сопоставление с использованием элементов применяется для всех столбцов, которые еще не были обработаны.

2

Использовать сопоставление с использованием элементов. Может быть совмещено с XML_ATTRIBUTES. В этом случае, атрибутивная модель сопоставления применяется в первую очередь, а потом сопоставление с использованием элементов применяется для всех столбцов, которые еще не были обработаны.

8

Может быть совмещено (логическое OR) с XML_ATTRIBUTES или XML_ELEMENTS. В смысле получения, этот флаг указывает, что используемые данные не должны копироваться в свойство переполнения @mp:xmltext.

SchemaDeclaration

Определение схемы формы: ColName ColType [ColPattern | MetaProperty] [,ColNameColType [ColPattern | MetaProperty]...]

ColName

Название столбца в наборе строк.

ColType

Тип данных SQL Server столбца в наборе строк. Если типы столбцов отличаются от соответствующих типов данных xml атрибута, происходит приведение типов.

ColPattern

Необязательный общий шаблон XPath, который описывает, как узлы XML должны быть сопоставлены столбцам. Если аргумент ColPattern не указан, применяется сопоставление по умолчанию (атрибутивная модель сопоставления или сопоставление с использованием элементов, как указано в flags).

Шаблон XPath, заданный как ColPattern, используется для указания специального порядка сопоставления (в случае атрибутивной модели сопоставления и сопоставления с использованием элементов), которое переписывает или расширяет сопоставление по умолчанию, указанное flags.

Общий шаблон XPath, заданный как аргумент ColPattern, также поддерживает метасвойства.

MetaProperty

Одно из метасвойств, предоставляемых OPENXML. Если задано MetaProperty, столбец содержит сведения, предоставленные метасвойством. Метасвойства позволяют извлекать сведения (такие как относительное положение и сведения о пространстве имен) об узлах XML. По сравнению с текстовым представлением метасвойства позволяют увидеть больше сведений.

TableName

Название таблицы, которое может быть указано (вместо аргумента SchemaDeclaration), если таблица с необходимой схемой уже существует и не требует никакого шаблона столбцов.

 Замечания

Предложение WITH предоставляет формат набора строк (и дополнительные сведения о сопоставлениях, если необходимо), используя либо аргументSchemaDeclaration, либо указывая существующее значение аргумента TableName. Если необязательное предложение WITH не задано, результаты возвращаются в формате краевой таблицы. Краевые таблицы представляют собой структуру мелкогранулированного XML-документа (имена элементов/атрибутов, иерархия документа, пространства имен, и т. д.) в одной таблице.