Udostępnij przez


Identyfikowanie przy użyciu kolumny klucz sql:klucz-pól (SQLXML 4.0)

Po określeniu kwerendę XPath dla schematu XSD najważniejsze informacje w większości przypadków jest wymagane do uzyskania właściwego zagnieżdżenia w wyniku.Określanie sql:key-fields Adnotacja jest sposobem zapewnienia generowany jest odpowiedniej hierarchii.

Uwaga

W celu zapewnienia prawidłowego zagnieżdżanie, zaleca się, że określona sql:key-fields dla elementów, które są mapowane do tabel. Kod XML produkowane jest czuły na zamawianie podstawowego zestaw wyników.Jeśli sql:key-fields nie jest określony, wygenerowany kod XML nie może być poprawnie uformowany.

Wartość sql:key-fields identyfikuje kolumna, które jednoznacznie identyfikują wiersze w relacji. Jeśli więcej niż jednej kolumna jest wymagane do unikatowego identyfikowania wiersza, wartości kolumna są rozdzielone spacjami.

Należy użyć sql:key-fields Adnotacja, gdy element zawiera <SQL:Relationship> który jest zdefiniowany między elementem i element podrzędność, ale nie zawiera klucz podstawowy tabela, która jest określona w elemencie nadrzędnym.

Przykłady

Aby utworzyć próbek pracy przy użyciu poniższych przykładach, musi spełniać określone wymagania.Aby uzyskać więcej informacji zobaczWymagania dotyczące uruchamianie SQLXML przykłady.

A.Produkujących odpowiednie zagnieżdżanie kiedy <SQL:Relationship> nie zapewnia wystarczających informacji

W tym przykładzie pokazano, gdzie sql:key-fields musi być określona.

Należy wziąć pod uwagę następujące schematu.Schemat określa hierarchię pomiędzy <Zamówienia> i <Odbiorcy> elementy, w którym <Zamówienia> element jest elementem nadrzędnym a <Odbiorcy> element jest podrzędność.

The <sql:relationship> tag is used to specify the parent-podrzędność relationship. W tabela Sales.SalesOrderHeader jako klucz nadrzędnego, która odwołuje się do klucz podrzędnego IDKlienta w tabela Sales.Customer identyfikuje identyfikator klienta.Informacje zawarte w <SQL:Relationship> nie jest wystarczająca do jednoznacznej identyfikacji wierszy w tabela nadrzędnej (Sales.SalesOrderHeader). W związku z tym, bez sql:key-fields Adnotacja, hierarchii, który jest generowany jest nieprawidłowe.

Z sql:key-fields określone na <Zamówienia>, adnotacja jednoznacznie identyfikuje wierszy w obiekcie nadrzędnym (tabela Sales.SalesOrderHeader) i jego elementy podrzędność są wyświetlane poniżej swojej witryny nadrzędnej.

Jest to schemat:

<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="OrdCust"
        parent="Sales.SalesOrderHeader"
        parent-key="CustomerID"
        child="Sales.Customer"
        child-key="CustomerID" />
  </xsd:appinfo>
</xsd:annotation>
  <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader" 
               sql:key-fields="SalesOrderID">
   <xsd:complexType>
     <xsd:sequence>
     <xsd:element name="Customer" sql:relation="Sales.Customer" 
                       sql:relationship="OrdCust"  >
       <xsd:complexType>
         <xsd:attribute name="CustID" sql:field="CustomerID" />
         <xsd:attribute name="SoldBy" sql:field="SalesPersonID" />
       </xsd:complexType>
     </xsd:element>
     </xsd:sequence>
     <xsd:attribute name="SalesOrderID" type="xsd:integer" />
     <xsd:attribute name= "CustomerID" type="xsd:string" />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Aby utworzyć próbę pracy tego schematu

  1. Skopiować powyższy kod schematu i wkleić go do pliku tekstowego.Zapisz plik jako KeyFields1.xml.

  2. Skopiuj następujący szablon i wkleić go do pliku tekstowego.Zapisz plik jako KeyFields1T.xml w tym samym katalogu, w którym zapisano KeyFields1.xml.Kwerendy XPath w szablonie zwraca wszystkie <Zamówienia> elementy z IDKlienta mniej niż 3.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="KeyFields1.xml">
            /Order[@CustomerID &lt; 3]
        </sql:xpath-query>
    </ROOT>
    

    To ścieżka do katalogu określonego dla mapowania schematu (KeyFields1.xml) jest względna w stosunku do katalogu, w którym są zapisywane w szablonie.Ścieżka bezwzględna również można określić, na przykład:

    mapping-schema="C:\MyDir\KeyFields1.xml"
    
  3. Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać tego szablonu.

    Aby uzyskać więcej informacji zobacz Przy użyciu obiektu ADO w celu wykonać kwerendy SQLXML.

Jest to zestaw wyników częściowych:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
    <Order SalesOrderID="43860" CustomerID="1">
       <Customer CustID="1" SoldBy="280"/>
    </Order>
    <Order SalesOrderID="44501" CustomerID="1">
       <Customer CustID="1" SoldBy="280"/>
    </Order>
    <Order SalesOrderID="45283" CustomerID="1">
       <Customer CustID="1" SoldBy="280"/>
    </Order>
    .....
</ROOT>

B.Określanie sql:klucz-pola, aby uzyskać prawidłowe zagnieżdżenia w wyniku

W następujących schematu jest nie hierarchii określona za pomocą <SQL:Relationship>. Schemat nadal wymaga określenia sql:key-fields adnotacji do jednoznacznej identyfikacji pracowników w tabela HumanResources.Employee.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="HumanResources.Employee" sql:key-fields="EmployeeID" >
   <xsd:complexType>
     <xsd:sequence>
        <xsd:element name="Title">
          <xsd:complexType>
            <xsd:simpleContent>
              <xsd:extension base="xsd:string">
                 <xsd:attribute name="EmployeeID" type="xsd:integer" />
              </xsd:extension>
            </xsd:simpleContent>
          </xsd:complexType>
        </xsd:element>
     </xsd:sequence>
   </xsd:complexType>
  </xsd:element>
</xsd:schema>

Aby utworzyć próbę pracy tego schematu

  1. Skopiować powyższy kod schematu i wkleić go do pliku tekstowego.Zapisz plik jako KeyFields2.xml.

  2. Skopiuj następujący szablon i wkleić go do pliku tekstowego.Zapisz plik jako KeyFields2T.xml w tym samym katalogu, w którym zapisano KeyFields2.xml.Kwerendy XPath w szablonie zwraca wszystkie <HumanResources.Employee> elementów:

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="KeyFields2.xml">
        /HumanResources.Employee
      </sql:xpath-query>
    </ROOT>
    

    To ścieżka do katalogu określonego dla mapowania schematu (KeyFields2.xml) jest względna w stosunku do katalogu, w którym są zapisywane w szablonie.Ścieżka bezwzględna również można określić, na przykład:

    mapping-schema="C:\MyDir\KeyFields2.xml"
    
  3. Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać tego szablonu.

    Aby uzyskać więcej informacji zobacz Przy użyciu obiektu ADO w celu wykonać kwerendy SQLXML.

Oto wynik:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <HumanResources.Employee>
    <Title EmployeeID="1">Production Technician - WC60</Title> 
  </HumanResources.Employee>
  <HumanResources.Employee>
    <Title EmployeeID="2">Marketing Assistant</Title> 
  </HumanResources.Employee>
  <HumanResources.Employee>
    <Title EmployeeID="3">Engineering Manager</Title> 
  </HumanResources.Employee>
  ...
</ROOT>