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
Skopiować powyższy kod schematu i wkleić go do pliku tekstowego.Zapisz plik jako KeyFields1.xml.
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 < 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"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
Skopiować powyższy kod schematu i wkleić go do pliku tekstowego.Zapisz plik jako KeyFields2.xml.
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"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>