SQL Server 2005 позволяет хранить данные XML двумя способами:
- Как Rowset &
- Столбец XML
Хранение данных XML в наборе строк
- Если ваш клиент отправил вам данные как
XML-документ и вам нужно хранить
эти данные в таблице базы данных, в первую очередь
вам нужно "измельчить" данные XML. SQL
Сервер позволяет уничтожать данные XML
с помощью функции OPENXML и
связанные хранимые процедуры.
Измельчение XML-документа включает в себя следующие задачи:
- i) Разбор XML-документа SQL
Сервер 2005 обеспечивает
sp_xml_preparedocument
хранимая процедура для анализа XML-документа.
Эта хранимая процедура читает XML
документ и анализирует его с MSXML
синтаксический анализатор. Проанализированный документ является
внутреннее древовидное представление
различные узлы в документе XML, такие как
элементы, атрибуты, текст и
комментарии.
- ii) Получить набор строк из дерева.
Теперь вам нужно извлечь данные из
доступные данные XML. Ты используешь
openxml для этой цели и для генерации набора строк в памяти
из проанализированных данных. Синтаксис:
openxml(idoc int[in],rowpattern
nvarchar[in],[flags byte[in]]) [WITH
(SchemaDeclaration | TableName)]
idoc - определяет дескриптор документа
внутреннее древовидное представление xml
doc rowpattern - указывает XPath
шаблон, используемый для идентификации узлов
обрабатываться как строки. flags-
указывает на отображение, которое должно быть
используется между данными XML и реляционными
набор строк, и как столбец перелива
должно быть заполнено. Это необязательно и
может иметь 0,1,2,3 для использования по умолчанию
сопоставление, чтобы получить атрибут
значения, чтобы получить значения элемента
и получить оба значения
соответственно. SchemaDeclaration-
определяет схему набора строк
декларация для столбцов, которые будут
вернулся с помощью комбинации
имена столбцов, типы данных и
узоры. TableName - указывает
имя таблицы, которая может быть дана вместо
SchemaDeclaration, если таблица с
требуемая схема уже существует и
никаких шаблонов не требуется.
- iii) Сохранить данные из набора строк.
Вы можете использовать набор строк, созданный
openxml для хранения данных, так же, как вы подали бы в суд на любой другой
Rowset. Вы можете вставить набор строк
данные в постоянные таблицы в
базы данных.
- iv) Очистить память. Вам нужно
освободить память, где вы сохранили
набор строк. Для этого вы используете
sp_xml_removedocument
хранимая процедура.
Например, следующие данные доступны в XML-документе:
DECLARE @Doc int
DECLARE @XMlDoc nvarchar(1000)
SET @XMLDoc = N'<ROOT>
<Customer CustomerID="JHO1" Name="Jack">
<Order OrderID="1001" CustomerID="JH01"
OrderDate="2009-07-04T00:00:00">
<OrderDetail ProductID="11" Quantity="12"/>
<OrderDetail ProductID="22" Quantity="10"/>
</Order>
</Customer>
<Customer CustomerID="SG01" Name="Steve">
<Order OrderID="1002" CustomerID="SG01"
OrderDate="2009-08-16T00:00:00">
<OrderDetail ProductID="32" Quantity="3"/>
</Order>
</Customer>
</ROOT>'
Чтобы просмотреть эти XML-данные в наборе строк, вам необходимо выполнить следующие операторы:
1. Создать внутреннее представление XML-документа EXEC sp_xml_preparedocument @Doc OUTPUT, @XMLDoc
2. Выполните следующий запрос для сохранения данных в таблице, используя функцию OPENXML:
INSERT INTO CustomerDetails
SELECT *
FROM openxml (@Doc, '/ROOT/Customer' , 1)
WITH (CustomerID varchar(10),
Name varchar(20) )
Данные будут отображаться как в таблице:
CustomerID | Name |
___________|_________|
JH01 | Jack |
| |
SG01 | Steve |
___________|_________|
3. Удалить внутреннее дерево из памяти, выполнив
EXEC sp_xml_removedocument @Doc
Вы закончили.
Я думаю, что этот метод поможет, а не другой, т. Е. Хранение XML-данных в виде столбца XML.