Identyfikowanie przy użyciu kolumn klucz sql:klucz-pól (SQLXML 4.0)
Jeśli nie określono kwerendę XPath schematem XSD klucz wymagane informacje w większości przypadków uzyskania właściwego zagnieżdżanie w wyniku.Określanie sql:key-fields adnotacji jest sposobem zapewnienia generowany jest odpowiednią hierarchię.
Ostrzeżenie
W celu zapewnienia właściwego zagnieżdżanie, zaleca się określenie sql:key-fields dla elementów, które są mapowane na tabele.XML, produkowany jest wrażliwy na zamawianie podstawowego zestaw wyników.Jeśli sql:key-fields nie jest określony, wygenerowany kod XML nie może być uformowany poprawnie.
Wartość sql:key-fields identyfikuje kolumna jednoznacznie identyfikują wiersze w relacji.W razie potrzeby więcej niż jednej kolumna do jednoznacznego identyfikowania wiersza wartości kolumna są rozdzielone spacjami.
Należy użyć sql:key-fields adnotacji, gdy element zawiera <sql:relationship> , zdefiniowano między elementem i element podrzędność, ale nie zapewnia klucz podstawowy tabela, która jest określona w elemencie nadrzędnym.
Przykłady
Aby utworzyć próbki pracy przy użyciu poniższych przykładach, musi spełniać określone wymagania.Aby uzyskać więcej informacji, zobacz Wymagania dotyczące uruchamianie przykładów SQLXML.
A.Produkujących właściwe zagnieżdżanie podczas <sql:relationship> nie dostarcza wystarczających informacji
Ten przykład pokazuje, gdzie sql:key-fields musi być określony.
Rozważmy następujący schemat.Schemat określa hierarchię pomiędzy <zamówienia> i <klienta> elementów, w którym <zamówienia> element jest nadrzędny i <klienta> element jest podrzędność.
**<Sql:relationship>**tag jest używana do określania relacji nadrzędny podrzędność.Identyfikuje IDKlienta w tabela Sales.SalesOrderHeader jako klucz nadrzędnego, który odwołuje się do IDKlienta podrzędność klucz w tabela Sales.Customer.Informacje zawarte w <sql:relationship> nie jest wystarczająca do jednoznacznego identyfikowania wierszy w tabela nadrzędnej (Sales.SalesOrderHeader).Dlatego też, bez sql:key-fields adnotacji, hierarchii, który jest generowany jest niedokładna.
Z sql:key-fields określono na <zamówienia>, adnotacja unikatowo identyfikuje wierszy nadrzędnych (tabela Sales.SalesOrderHeader) i jego podrzędność elementy są wyświetlane poniżej 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>
Tworzenie próbki roboczej tego schematu
Kod schematu skopiować 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.Zwraca wszystkie kwerendy XPath w szablonie <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>Ścieżka katalogu określonego dla mapowania schematu (KeyFields1.xml) jest katalog, w którym zapisany szablon.Ścieżka bezwzględna również można określić, na przykład:
mapping-schema="C:\MyDir\KeyFields1.xml"Tworzenie i używanie szablon wykonać skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).
Aby uzyskać więcej informacji, zobacz Przy użyciu ADO do wykonywania kwerend SQLXML.
To jest częściowe zestaw wyników:
<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-pól do wytworzenia właściwego zagnieżdżanie w wyniku
W następujących schematu jest nie hierarchii określone za pomocą <sql:relationship>.Schemat nadal wymaga określenia sql:key-fields adnotacji do unikatowej 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="BusinessEntityID" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Title">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="BusinessEntityID" type="xsd:integer" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Tworzenie próbki roboczej tego schematu
Kod schematu skopiować 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.Zwraca wszystkie kwerendy XPath w szablonie <HumanResources.Employee> elementy:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="KeyFields2.xml"> /HumanResources.Employee </sql:xpath-query> </ROOT>Ścieżka katalogu określonego dla mapowania schematu (KeyFields2.xml) jest katalog, w którym zapisany szablon.Ścieżka bezwzględna również można określić, na przykład:
mapping-schema="C:\MyDir\KeyFields2.xml"Tworzenie i używanie szablon wykonać skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).
Aby uzyskać więcej informacji, zobacz Przy użyciu ADO do wykonywania kwerend SQLXML.
Jest to wynikiem:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<HumanResources.Employee>
<Title BusinessEntityID="1">Production Technician - WC60</Title>
</HumanResources.Employee>
<HumanResources.Employee>
<Title BusinessEntityID="2">Marketing Assistant</Title>
</HumanResources.Employee>
<HumanResources.Employee>
<Title BusinessEntityID="3">Engineering Manager</Title>
</HumanResources.Employee>
...
</ROOT>