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

Откуда:
Сообщений: 6201
Вот такой тест:
create table dbo.SxblTest (
  b binary(2) not null,
  s varchar(10) not null
);
insert into dbo.SxblTest values (0x0102,'0123456789');
select * from dbo.SxblTest for xml raw, binary base64, root, type;

- получаем xml:
<root>
  <row b="AQI=" s="0123456789" />
</root>

По таблице dbo.SxblTest генерируем 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="root" sql:is-constant="1">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="row" sql:relation="test.SxblTest" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:attribute name="b" use="required">
              <xsd:simpleType>
                <xsd:restriction base="sqltypes:binary">
                  <xsd:maxLength value="2" />
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:attribute>
            <xsd:attribute name="s" use="required">
              <xsd:simpleType>
                <xsd:restriction
                  base="sqltypes:varchar"
                  sqltypes:localeId="1049"
                  sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth">
                  <xsd:maxLength value="10" />
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:attribute>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Проводим загрузку данных с установленным флагом SchemaGen=true (создание целевой таблицы) в таблицу с аналогичным именем, но в другую схему (test). Выгрузка проходит нормально, сообщений об ошибках нет, данные записываются. Но DDL созданной таблицы выглядит вот так:
CREATE TABLE [test].[SxblTest](
  [b] [varbinary](8000) NOT NULL,
  [s] [nvarchar](1000) NOT NULL
) ON [PRIMARY]

Вопрос: это я что-то делаю не так, или баг SqlXmlBulkLoad? (в данном случае он 4.0)
Сервер:

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86) 
Jun 17 2011 00:57:23
Copyright (c) Microsoft Corporation
Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)

Но аналогичный результат был получен и при загрузке на 2005-м (9.00.5057.00) сервере.
3 апр 14, 15:09    [15827560]     Ответить | Цитировать Сообщить модератору
 Re: SqlXmlBulkLoad & SchemaGen=true - игнорирование определения метаданных.  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
Сон Веры Павловны,

?

https://www.sql.ru/forum/1082337/sqlxmlbulkload-dlina-varchar?hl=sqlxmlbulkload
3 апр 14, 22:00    [15829913]     Ответить | Цитировать Сообщить модератору
 Re: SqlXmlBulkLoad & SchemaGen=true - игнорирование определения метаданных.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Блин, было совсем недавно: 15721293
3 апр 14, 22:00    [15829915]     Ответить | Цитировать Сообщить модератору
 Re: SqlXmlBulkLoad & SchemaGen=true - игнорирование определения метаданных.  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
daw,

ага, спасибо, решилось добавлением sql:datatype с указанием типа и размера в xsd:attribute.
4 апр 14, 06:39    [15830915]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить