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


Заметки sql:limit-field и sql:limit-value (SQLXML 4.0)

Массовая загрузка XML обрабатывает заметки sql:limit-field и sql:limit-value в соответствии с их определением. Дополнительные сведения см. в разделе Фильтрация значений при помощи sql:limit-field и sql:limit-value (SQLXML 4.0).

Например, пусть база данных содержит следующие таблицы.

  • Customer (CustomerID, CompanyName)

  • Адреса (CustomerID, AddressType, StreetAddress)

Потребитель может иметь много адресов, с каждым из которых связан тип адреса (например, адрес доставки или адрес для выставления счетов).

А теперь обратите внимание на XML-представление этих таблиц, заданное в следующей XSD-схеме с заметками:

<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="CustAddr"        parent="Customer"        parent-key="CustomerID"        child="Address"        child-key="CustomerID" />  </xsd:appinfo></xsd:annotation>  <xsd:element name="Customer" sql:relation="Customer" >   <xsd:complexType>        <xsd:attribute name="CustomerID"   type="xsd:int" />         <xsd:attribute name="CompanyName"  type="xsd:string" />        <xsd:attribute name="BillTo"                        type="xsd:string"                        sql:relation="Address"                        sql:field="StreetAddress"                       sql:limit-field="AddressType"                       sql:limit-value="billing"                       sql:relationship="CustAddr" >        </xsd:attribute>        <xsd:attribute name="ShipTo"                        type="xsd:string"                        sql:relation="Address"                        sql:field="StreetAddress"                       sql:limit-field="AddressType"                       sql:limit-value="shipping"                       sql:relationship="CustAddr" >        </xsd:attribute>    </xsd:complexType>  </xsd:element></xsd:schema>

После получения этой схемы и XML-данных, массовая загрузка XML вставляет значение, указанное для атрибута BillTo в столбце столбце StreetAddress таблицы CustAddress наряду со значением «billing» для столбца AddressType.

Аналогично, массовая загрузка XML вставляет значение, указанное для атрибута ShipTo в столбце столбце StreetAddress наряду со значением «shipping» для столбца AddressType.

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

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

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

    CREATE TABLE Customer(                 CustomerID     int         PRIMARY KEY,                 CompanyName    varchar(20) NOT NULL)GOCREATE TABLE Address(                  CustomerID     int        FOREIGN KEY REFERENCES                                              Customer(CustomerID),                   StreetAddress  varchar(50),                  AddressType    varchar(10))GO
    
  3. Сохраните следующие образцы данных в файле SampleXMLData.xml.

    <Customer CustomerID="1111" CompanyName="Sean Chai" City="NY"              BillTo="111 Maple (Billing) "              ShipTo="111 Maple (Shipping)" /><Customer CustomerID="1112" CompanyName="Dont Know" City="LA"              BillTo="222 Spruce (Billing)"              ShipTo="222 Spruce (Shipping)" />
    
  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.XMLFragment = TrueobjBL.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:dt="urn:schemas-microsoft-com:datatypes"        xmlns:sql="urn:schemas-microsoft-com:xml-sql"><ElementType name="Customer" sql:relation="Customer" >    <AttributeType name="CustomerID" />    <AttributeType name="CompanyName" />    <AttributeType name="BillTo" />    <AttributeType name="ShipTo" />    <attribute type="CustomerID" />    <attribute type="CompanyName" />    <attribute type="BillTo"                 sql:limit-field="AddressType"                sql:limit-value="billing"                sql:field="StreetAddress"                sql:relation="Address" >                <sql:relationship                         key="CustomerID"                        key-relation="Customer"                        foreign-relation="Address"                        foreign-key="CustomerID" />    </attribute>    <attribute type="ShipTo"                 sql:limit-field="AddressType"                sql:limit-value="shipping"                sql:field="StreetAddress"                sql:relation="Address" >                <sql:relationship                      key="CustomerID"                     key-relation="Customer"                     foreign-relation="Address"                     foreign-key="CustomerID" />    </attribute></ElementType></Schema>