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

Откуда: Киев
Сообщений: 60
SQL Server 2000 SP4
SQLXML 3.0 SP3

Помогите плз написать схему для загрузки файла при помощи SQLXMLBulkload
файл:
<ORDER>
  <NUMBER>test0001</NUMBER> 
  <DATE>2009-07-11</DATE> 
  <HEAD>
     <SUPPLIER>123456789</SUPPLIER> 
     <BUYER>987654321</BUYER> 
  </HEAD>
</ORDER>
таблица:
CREATE TABLE [TEST_ORDER] (
	[NUMBER]    char(16)      NOT NULL,
	[DATE]      smalldatetime NOT NULL,
	[SUPPLIER]  nchar(14)     NOT NULL ,
	[BUYER]     nchar(14)     NOT NULL 
)
нужно получить:
NUMBER           DATE                                                   SUPPLIER       BUYER          
---------------- ------------------------------------------------------ -------------- --------------
test0001 2009-07-11 00:00:00 123456789 987654321
схема:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">

  <xsd:element name="ORDER" sql:relation="TEST_ORDER" >
   <xsd:complexType>
     <xsd:sequence>
       <xsd:element name="NUMBER"            type="xsd:string" />
       <xsd:element name="DATE"              type="xsd:date" />
     </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
Проблема в том, что не знаю как прописать в схеме, чтобы элементы из <ORDER></ORDER> и <ORDER><HEAD></HEAD></ORDER> загрузились в одну таблицу.
13 июл 09, 00:33    [7406388]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать схему для SQLXMLBulkload  [new]
daw
Member

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

так?
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:sql="urn:schemas-microsoft-com:mapping-schema">

   <xsd:element name="ORDER"  sql:relation="TEST_ORDER">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="NUMBER"            type="xsd:string" />
        <xsd:element name="DATE" type="xsd:date" sql:datatype="smalldatetime"/>
        <xsd:element name="HEAD" sql:is-constant="true">
          <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="SUPPLIER" type="xsd:string" sql:field="SUPPLIER"/>
            <xsd:element name="BUYER" type="xsd:string" sql:field="BUYER"/>
          </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
</xsd:schema>

Posted via ActualForum NNTP Server 1.4

13 июл 09, 09:10    [7406649]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать схему для SQLXMLBulkload  [new]
san_d
Member

Откуда: Киев
Сообщений: 60
daw,
Да! Спасибо огромное!
13 июл 09, 12:25    [7407689]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать схему для SQLXMLBulkload  [new]
san_d
Member

Откуда: Киев
Сообщений: 60
Помогите плз еще с одним файлом.
файл:
<TESTDOC>
  <NUMBER>test0001</NUMBER> 
  <DATE>2009-08-11</DATE> 
  <HEAD>
    <SUPPLIER>123456789</SUPPLIER> 
    <BUYER>987654321</BUYER> 
    <PACKINGSEQUENCE>
      <HIERARCHICALID>1</HIERARCHICALID> 
      <POSITION>
        <POSITIONNUMBER>1</POSITIONNUMBER> 
        <PRODUCT>123456789</PRODUCT> 
      </POSITION>
      <POSITION>
        <POSITIONNUMBER>2</POSITIONNUMBER> 
        <PRODUCT>1234567891</PRODUCT> 
      </POSITION>
    </PACKINGSEQUENCE>
  </HEAD>
</TESTDOC>
Нужно загрузить файл в две таблицы:
CREATE TABLE [TEST_DOC] (
	[ID]       int IDENTITY (1, 1) NOT NULL ,
	[NUMBER]   nchar(16),
	[DATE]     smalldatetime,
	[SUPPLIER] nchar(14),
	[BUYER]    nchar(14)

        PRIMARY KEY([ID])
)
GO

CREATE TABLE [TEST_DOC_POSITIONS] (
	[ID]                   int NOT NULL ,
	[HIERARCHICALID]       int NOT NULL ,
	[HIERARCHICALPARENTID] int NULL ,
	[POSITIONNUMBER]       int NOT NULL ,
	[PRODUCT]              nchar(14)

        PRIMARY KEY([ID],[HIERARCHICALID],[POSITIONNUMBER])
        
        FOREIGN KEY([ID]) REFERENCES [TEST_DOC]([ID])
)
GO
Т.е. должно загрузиться таким образом:
ID          NUMBER           DATE                                                   SUPPLIER       BUYER          
----------- ---------------- ------------------------------------------------------ -------------- --------------
1 test0001 2009-08-11 00:00:00 123456789 987654321

(1 row(s) affected)

ID HIERARCHICALID HIERARCHICALPARENTID POSITIONNUMBER PRODUCT
----------- -------------- -------------------- -------------- --------------
1 1 NULL 1 123456789
1 1 NULL 2 1234567891

(2 row(s) affected)
Схема:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">

  <xsd:annotation>
    <xsd:appinfo>
      <sql:relationship name="Position"
            parent="TEST_DOC"
            parent-key="ID"
            child="TEST_DOC_POSITIONS"
            child-key="ID" />
    </xsd:appinfo>
  </xsd:annotation>

  <xsd:element name="TESTDOC"    sql:relation="TEST_DOC"
                                 sql:key-fields="ID" >
   <xsd:complexType>
     <xsd:sequence>
       <xsd:element name="NUMBER"              type="xsd:string" />
       <xsd:element name="DATE"                type="xsd:date" sql:datatype="smalldatetime"/>
       <xsd:element name="HEAD" sql:is-constant="true">
         <xsd:complexType>
           <xsd:sequence>
             <xsd:element name="SUPPLIER"          type="xsd:string" sql:field="SUPPLIER"/>
             <xsd:element name="BUYER"             type="xsd:string" sql:field="BUYER"/>
             <xsd:element name="PACKINGSEQUENCE" sql:relation="TEST_DOC_POSITIONS"
                                                 sql:relationship="Position">
               <xsd:complexType>
                 <xsd:sequence>
                   <xsd:element name="HIERARCHICALID"                type="xsd:positiveInteger" sql:field="HIERARCHICALID"/>
                   <xsd:element name="HIERARCHICALPARENTID"          type="xsd:positiveInteger" sql:field="HIERARCHICALPARENTID"/>
                   <xsd:element name="POSITION" sql:is-constant="true">
                     <xsd:complexType>
                       <xsd:sequence>
                         <xsd:element name="POSITIONNUMBER"          type="xsd:positiveInteger" sql:field="POSITIONNUMBER"/>
                         <xsd:element name="PRODUCT"                 type="xsd:string"          sql:field="PRODUCT"/>
                       </xsd:sequence>
                     </xsd:complexType>
                   </xsd:element>   <!-- POSITION -->
                 </xsd:sequence>
               </xsd:complexType>
             </xsd:element>  <!-- PACKINGSEQUENCE -->
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>  <!-- HEAD -->
     </xsd:sequence>
   </xsd:complexType>
  </xsd:element>  <!-- TESTDOC -->
</xsd:schema>

Сейчас при загрузке получаю ошибку:
XML SAX Parser: Data mapping to column 'POSITIONNUMBER' was already found in the data. Make sure that no two schema definitions map to the same column.
11 авг 09, 15:53    [7523652]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить