|
Хранимые процедуры sp_xml_preparedocument и sp_xml_removedocument в SQL Server 2000, функция OPENXML
Синтаксис sp_xml_preparedocument выглядит так:
sp_xml_preparedocument hdoc OUTPUT [, xmltext] [, xpath_namespaces]
где
- hdoc - указатель (handle) на создаваемую структуру дерева XML (потом будет использоваться в OPENXML и sp_xml_removedocument);
- xmltext - собственно передаваемый код документа XML;
- xpath_namespaces - необязательный параметр, который позволяет отфильтровать ненужные данные документа XML в соответствии со спецификацией XPath.
Пример части кода myProcImportXml с использованием sp_xml_preparedocument:
CREATE PROC myProcImportXml @doc NText
AS
DECLARE @idoc int
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
Синтаксис функции OPENXML выглядит так:
OPENXML(idoc int [in],rowpattern nvarchar[in],[flags byte[in]]) [WITH (SchemaDeclaration | TableName)]
где
- idoc - указатель на структуру дерева XML (то, что возвращалось sp_xml_preparedocument как hdoc);
- rowpattern - запрос в формате XPath, который определяет, что будет возвращаться из документа и позволяет фильтровать ненужные данные. Для того, чтобы ничего не фильтровать, достаточно указать просто имя корневого элемента документа XML, например, 'Order';
- flags - битовая маска, которая позволяет определить, как хранятся данные столбцов генерируемого ROWSET в документе XML - как атрибуты (по умолчанию, им же соответствует значение 1) или элементы (значение 2);
- SchemaDeclaration - возможность определить, структуру таблицы и какой атрибут/элемент пойдет в какой столбец таблицы
- Table - возможность определить, структура какой таблицы может быть использована для формирования ROWSET.
Можно явно указать создаваемую структуру ROWSET при помощи ключевого слова WITH:
SELECT * FROM OPENXML(@idoc, 'Order', 1) WITH (orderno integer, [date] datetime)
Для вставки можно "упаковать" запрос с OPENXML в INSERT (для вставки в существующую таблицу) или SELECT INTO (для вставки в новую таблицу), например:
INSERT xml_orders SELECT * FROM OPENXML(@idoc, 'Order', 1) WITH (orderno integer, [date] datetime)
Синтаксис sp_xml_removedocument очень прост:
sp_xml_removedocument hdoc
где hdoc - возвращаемый sp_xml_preparedocumemt указатель на иерархическую структуру подготовленного к загрузке документа XML. Настоятельно рекомендуется не забывать использовать sp_xml_removedocument, потому что в противном случае утечка оперативной памяти может получиться существенной.
|