Б. Массовый импорт XML-данных в существующую строку

В этом примере при помощи поставщика массового набора строк OPENROWSET в существующую строку или строки образца таблицы T добавляются инструкции XML.

Примечание
Чтобы выполнить этот пример, вначале необходимо выполнить сценарий проверки в примере А. В этом примере сначала создается таблица tempdb.dbo.T; затем в нее проводится массовый импорт данных из файла SampleData3.txt.

Образец файла данных

В примере Б используется измененная версия образца файла данных SampleData3.txt из предыдущего примера. Для запуска этого примера нужно изменить содержимое этого файла следующим образом:

Some New Text

Пример Б

-- Query before update shows initial state of XmlCol values.SELECT * FROM TUPDATE TSET XmlCol =(SELECT * FROM OPENROWSET( BULK 'C:\SampleFolder\SampleData3.txt', SINGLE_BLOB) AS x)WHERE IntCol = 1GO

[В начало]

В. Массовый импорт XML-данных из файла, содержащего DTD

Примечание по безопасности
Включать поддержку для определений типов документов (DTD) не рекомендуется, если только это не является неотъемлемой частью среды XML. Включение поддержки DTD увеличивает уязвимую контактную зону сервера и может привести к атаке типа «отказ в обслуживании». При необходимости включения поддержки DTD снизить риск для этой опасности можно с помощью обработки только доверенных XML-документов.

При попытке использования команды bcp для импорта XML-данных из файла, содержащего DTD, может возникнуть одна из следующих ошибок:

SQLState = 42000, NativeError = 6359

«Error = [Microsoft][SQL Server Native Client][ SQL Server]Разбор XML при помощи встроенного DTD не допускается. Используйте CONVERT с параметром стиля 2 для включения ограниченной поддержки встроенного DTD.»

«Не удалось выполнить BCP-копирование %s»

Чтобы избежать этой проблемы, можно импортировать XML-данные из файла, содержащего DTD, при помощи функции OPENROWSET(BULK...), а затем указать параметр CONVERT в предложении SELECT. Базовым синтаксисом команды является:

INSERT ... SELECT CONVERT(…) FROM OPENROWSET(BULK...)

Образец файла данных

Перед проверкой этого примера массового импорта создайте файл (C:\temp\Dtdfile.xml), содержащий следующий образец данных:

January

Образец таблицы

В примере В используется образец таблицы T1, созданный следующей инструкцией CREATE TABLE:

USE tempdbCREATE TABLE T1(XmlCol xml);GO

Пример В

В этом примере используется OPENROWSET(BULK...) и в предложении SELECT указывается параметр CONVERT для импорта XML-данных из Dtdfile.xml в образец таблицы T1.

INSERT T1 SELECT CONVERT(xml, BulkColumn, 2) FROM OPENROWSET(Bulk 'c:\temp\Dtdfile.xml', SINGLE_BLOB) [rowsetresults]

После выполнения инструкции INSERT определение DTD исключается из XML и хранится в таблице T1.

[В начало]

Главная Страница