Поделиться через


sql:overflow-field (SQLXML 4.0)

В схеме можно указать столбец как столбец переполнения для того, чтобы получить все невостребованные данные из XML-документа. Этот столбец указывается в схеме с помощью заметки sql:overflow-field. Возможно иметь несколько столбцов переполнения.

Каждый раз, когда узел XML (элемент или атрибут), для которого существует заметка sql:overflow-field, определяющая входы в область, столбец переполнения активируется и получает невостребованные данные. Когда узел выходит за границы области, столбец переполнения перестает быть активным, и массовая загрузка XML делает активным предыдущее поле переполнения (если таковое имеется).

После того как она сохраняет данные в столбец переполнения, массовая загрузка XML также сохраняет открывающий и закрывающий теги родительского элемента, для которого определена заметка sql:overflow-field.

Например, следующая схема описывает элементы <Customers> и <CustOrder>. Каждый из данных элементов определяет столбец переполнения:

<?xml version="1.0" ?><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="CustCustOrder"        parent="Cust"        parent-key="CustomerID"        child="CustOrder"        child-key="CustomerID" />  </xsd:appinfo> </xsd:annotation> <xsd:element name="ROOT" sql:is-constant="1">  <xsd:complexType>    <xsd:sequence>       <xsd:element name="Customers"                    sql:relation="Cust"                   sql:overflow-field="OverflowColumn">        <xsd:complexType>             <xsd:sequence>              <xsd:element name="CustomerID" type="xsd:integer"/>             <xsd:element name="CompanyName"  type="xsd:string"/>             <xsd:element name="City" type="xsd:string"/>             <xsd:element name="Order"                          sql:relation="CustOrder"                          sql:relationship="CustCustOrder"                          sql:overflow-field="OverflowColumn">               <xsd:complexType>                 <xsd:attribute name="OrderID"/>                 <xsd:attribute name="CustomerID"/>               </xsd:complexType>             </xsd:element>          </xsd:sequence>         </xsd:complexType>      </xsd:element>    </xsd:sequence>  </xsd:complexType> </xsd:element></xsd:schema>

В схеме элемент <Customer> сопоставляется с таблицей «Cust», а элемент <Order> сопоставляется с таблицей "CustOrder".

Как элемент <Customer>, так и элемент <Order>, определяет столбец переполнения. Таким образом, массовая загрузка XML сохраняет все невостребованные дочерние элементы и атрибуты элемента <Customer> в столбец переполнения таблицы «Cust», а все невостребованные дочерние элементы и атрибуты элемента <Order> в столбец переполнения таблицы "CustOrder".

Проверка рабочего образца

  1. Сохраните схему, приведенную в этом примере, в файле SampleSchema.xml.

  2. Создайте следующие таблицы.

    CREATE TABLE Cust (          CustomerID     int         PRIMARY KEY,          CompanyName    varchar(20) NOT NULL,          City           varchar(20) DEFAULT 'Seattle',          OverflowColumn nvarchar(200))GOCREATE TABLE CustOrder (          OrderID        int         PRIMARY KEY,          CustomerID     int         FOREIGN KEY REFERENCES                                          Cust(CustomerID),          OverflowColumn nvarchar(200))GO
    
  3. Сохраните следующий образец XML-данных в файле SampleXMLData.xml.

    <ROOT>  <Customers>    <CustomerID>1111</CustomerID>    <CompanyName>Hanari Carnes</CompanyName>    <City><![CDATA[NY]]> </City>      <Junk>garbage in overflow</Junk>    <Order OrderID="1" />    <Order OrderID="2" /> </Customers> <Customers>   <CustomerID>1112</CustomerID>   <CompanyName>Toms Spezialitten</CompanyName>   <City><![CDATA[LA]]> </City>   <xyz><address>111 Maple, Seattle</address></xyz>      <Order OrderID="3" /> </Customers>   <Customers>   <CustomerID>1113</CustomerID>   <CompanyName>Victuailles en stock</CompanyName>   <Order OrderID="4" />  </Customers></ROOT>
    
  4. Чтобы выполнить массовую загрузку XML-данных, сохраните этот пример на языке Microsoft Visual Basic Scripting Edition (VBScript) в файле Sample.vbs и выполните его.

    set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"objBL.ErrorLogFile = "c:\error.log"objBL.CheckConstraints = TrueobjBL.Execute "c:\SampleSchema.xml", "c:\SampleXMLData.xml"set objBL=Nothing