Хранимые процедуры для управления внутренним представлением дерева
Считывает входной XML-текст, проводит его синтаксический анализ при помощи синтаксического анализатора MSXML (Msxmlsql.dll) и выдает проанализированный документ, готовый к потреблению. Проанализированный документ является древовидным представлением различных узлов в XML-документе: элементов, атрибутов, текста, комментариев и т. д.
Процедура sp_xml_preparedocument возвращает дескриптор, по которому можно обратиться к вновь созданному внутреннему представлению XML-документа. Дескриптор действует только в течение сеанса либо до тех пор, пока не будет аннулирован путем выполнения процедуры sp_xml_removedocument.
Дескриптор вновь созданного документа. Аргумент 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.