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


sql:mapped, заметка (SQLXML 4.0)

Операция массовой загрузки XML обрабатывает заметку sql:mapped в XSD-схеме как ожидается, то есть если схема сопоставления задает sql:mapped="false" для любого элемента или атрибута, массовая загрузка XML не пытается сохранить связанные данные в соответствующий столбец.

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

В качестве примера рассмотрим следующую схему XSD.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"            xmlns:sql="urn:schemas-microsoft-com:mapping-schema"><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:attribute name="CustomerID"  type="xsd:integer" />       <xsd:attribute name="CompanyName" type="xsd:string" />       <xsd:attribute name="City"        type="xsd:string" />       <xsd:attribute name="HomePhone"   type="xsd:string"                                        sql:mapped="false" />    </xsd:complexType>  </xsd:element></xsd:sequence></xsd:complexType></xsd:element></xsd:schema>

Поскольку атрибут HomePhone задает sql:mapped="false", массовая загрузка XML не сопоставляет этот атрибут с соответствующим столбцом. В XSD-схеме определяется столбец переполнения (OverflowColumn), в который массовая загрузка сохраняет невостребованные данные.

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

  1. Создайте следующую таблицу в базе данных tempdb.

    USE tempdbCREATE TABLE Cust          (CustomerID     int         PRIMARY KEY,           CompanyName    varchar(20) NOT NULL,           City           varchar(20) DEFAULT 'Seattle',           OverflowColumn nvarchar(200))GO
    
  2. Сохраните схему, приведенную в этом примере, в файле SampleSchema.xml.

  3. Сохраните следующий образец XML-данных в файле SampleXMLData.xml.

    <ROOT>  <Customers CustomerID="1111" CompanyName="Sean Chai"              City="NY" HomePhone="111-1111" />  <Customers CustomerID="1112" CompanyName="Dont Know"              City="LA" HomePhone="222-2222" /></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
    

Эквивалентная схема XDR:

<?xml version="1.0" ?><Schema xmlns="urn:schemas-microsoft-com:xml-data"         xmlns:sql="urn:schemas-microsoft-com:xml-sql" >    <ElementType name="ROOT" sql:is-constant="1">      <element type="Customers" />   </ElementType>   <ElementType name="Customers" sql:relation="Cust"                             sql:overflow-field="OverflowColumn" >      <AttributeType name="CustomerID" />      <AttributeType name="CompanyName"  />      <AttributeType name="City"  />      <AttributeType name="HomePhone" />      <attribute type="CustomerID"  />      <attribute type="CompanyName"  />      <attribute type="City" />      <attribute type="HomePhone" sql:map-field="0" />   </ElementType></Schema>