Compartilhar via


sql:limit-field e sql:limit-value (SQLXML 4.0)

O XML Bulk Load processa as anotações sql:limit-field e sql:limit-value por suas definições. Para obter mais informações, consulte Filtrando valores usando sql:limit-field e sql:limit-value (SQLXML 4.0).

Por exemplo, suponha que um banco de dados contenha as seguintes tabelas:

  • Customer (CustomerID, CompanyName)

  • Addresses (CustomerID, StreetAddress, AddressType)

Um cliente pode ter muitos endereços e cada endereço pode ter um tipo de endereço associado a ele (por exemplo, um endereço para entrega ou para cobrança.

Agora considere esta exibição XML dessas tabelas como especificado no seguinte esquema XSD anotado:

<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>

Após o recebimento desse esquema e dos dados XML, o XML Bulk Load insere o valor especificado para o atributo BillTo na coluna StreetAddress da tabela CustAddress junto com o valor "billing" da coluna AddressType.

De modo semelhante, o XML Bulk Load insere o valor especificado para o atributo ShipTo na coluna StreetAddress junto com o valor "shipping" na coluna AddressType.

Para testar um exemplo de funcionamento

  1. Salve o esquema fornecido neste exemplo como SampleSchema.xml.

  2. Crie estas tabelas:

    CREATE TABLE Customer(
                     CustomerID     int         PRIMARY KEY,
                     CompanyName    varchar(20) NOT NULL)
    GO
    CREATE TABLE Address(
                      CustomerID     int        FOREIGN KEY REFERENCES 
                                                 Customer(CustomerID), 
                      StreetAddress  varchar(50),
                      AddressType    varchar(10))
    GO
    
  3. Salve os dados de exemplo a seguir como 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. Para executar o XML Bulk Load, salve e execute este exemplo do Microsoft Visual Basic Scripting Edition (VBScript) como 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 = True
    objBL.CheckConstraints=True
    objBL.Execute "c:\SampleSchema.xml", "c:\SampleXMLData.xml"
    set objBL=Nothing
    

Este é o esquema XDR equivalente:

<?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>