Как я могу импортировать и экспортировать данные из SQL Server 2005 в формат XML? - PullRequest
2 голосов
/ 22 мая 2009

Я очень озадачен тем, как SQL Server 2005 поддерживает импорт и экспорт файлов XML. Я думал, что BCP - это путь. Однако после прочтения всей документации кажется, что невозможно просто взять обычную таблицу и экспортировать ее в формат XML. Причина, по которой я спрашиваю, заключается в том, что я работаю с клиентом, который будет отправлять мне обновления данных в формате XML. У нас обоих одна база данных с одинаковыми структурами. Он прислал мне примеры XML-файлов. Я предполагал, что будет какой-то очень простой способ импортировать файлы данных, но я не могу понять это. Может кто-нибудь помочь мне понять, как взять файл XML и импортировать данные в существующую таблицу? Это должно быть просто, потому что файл XML был сгенерирован из таблицы с точно такой же структурой.

Спасибо, Corey

Ответы [ 4 ]

2 голосов
/ 08 июня 2009

Зачем вообще использовать XML в качестве формата обмена?

Если у вас одинаковая модель данных с обеих сторон, то обычные текстовые файлы или файлы BCP будут идеально соответствовать вашим потребностям, а также будут иметь меньший размер (т.е. извлекать и загружать быстрее)!

То, что XML является «современным», не означает, что это всегда лучший выбор! Конечно, если вы полагаете, что когда-нибудь в будущем вам понадобится обмениваться данными со сторонними организациями, не использующими одну и ту же модель данных или даже ту же платформу или интерфейс, случай, конечно, будет другим.

1 голос
/ 23 июня 2009

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.

0 голосов
/ 22 мая 2009

Я предполагаю, что клиент использует FOR XML, чтобы обернуть реляционные данные в XML-документ? Не существует автоматического способа измельчения xml обратно к исходной реляционной структуре, но вы должны иметь возможность делать это программно, если исходное поколение xml также использует директиву XMLSCHEMA. Если клиент включает это, то будет сгенерирована XML-схема, которая описывает, какой столбец (и его тип) представлен где в экземпляре XML. Я начал играть с этим подходом некоторое время назад, но никогда не заканчивал его.

0 голосов
/ 22 мая 2009

Импорт XML в SQL Server

Поиск столбца XML в SQL

Вы должны разобрать XML как в табличный формат. Помните: xml - это просто текст, поэтому вы должны сообщить SQL Server, что такое типы данных и т. Д.

Там нет одного выстрела волшебной пули INSERT MyTable FROM File = 'bob.xml'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...