Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SqlXmlBulkLoad: можно ли в xsd задать имя целевой таблицы, отличное от имени тэга данных?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
Такая ситуация: для выгрузки данных в XML использовалась конструкция FOR XML RAW, ROOT - соответственно, выгруженные данные имеют вид
<root>
  <row id="1" name="..." ... />
  ...

Выгрузка делалась из энного количества разных таблиц.
Далее, в опциях SqlXmlBulkLoad установлено SchemaGen=True и SGDropTables=True, т.е. при заливке данных целевая таблица дропается (если она есть), и создается заново. Проблема в том, что xsd, описывающий xml, в качестве корневого xsd:element использует а) имя тэга, содержащего данные (row в данном случае), б) это имя SqlXmlBulkLoad использует как имя целевой таблицы - т.е. в результате создается таблица с именем row, и все данные заливаются в нее. Вопрос: можно ли как-то в xsd задать имя целевой таблицы, но чтобы при этом имя тэга, содержащего данные, оставалось прежним (row)? Можно было бы, конечно, обработать все файлы выгрузки с помощью XSLT, но объем данных достаточно большой, и хотелось бы обойтись меньшей кровью.
28 мар 14, 17:13    [15802404]     Ответить | Цитировать Сообщить модератору
 Re: SqlXmlBulkLoad: можно ли в xsd задать имя целевой таблицы, отличное от имени тэга данных?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
Всё, разобрался (ответ нашел здесь: http://www.execsql.com/post/category/sql-xml-bulk-load)
Нужно:
1) объявить доп. неймспейс xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
2) для корневого xsd:element задать атрибут sql:relation со значением, равным имени целевой таблицы (при этом значение может включать имя схемы - только нужно, чтобы эта схема существовала на момент загрузки данных)
т.е. xsd должен выглядеть примерно так:
<xsd:schema
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
  xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
  elementFormDefault="qualified">
  <xsd:import
    namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
    schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
  <xsd:element name="row" sql:relation="test.MyTable">
    <xsd:complexType>
      <xsd:attribute name="Name" use="required">
        <xsd:simpleType>
          ....
28 мар 14, 17:40    [15802543]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить