Anahtar sütunlar kullanarak sql:key tanımlayan-alanlar (SQLXML 4.0)
XPath sorgusu karşı bir XSD şeması belirtildiğinde, anahtar bilgileri genellikle uygun Yuvalama sonuç elde etmek için gerekir.Belirtme sql:key-fields Ek açıklama uygun hiyerarşisi oluşturulur sağlayarak bir yoludur.
Not
Uygun bir iç içe geçirilmesi emin olmak için , belirttiğiniz önerilir sql:key-fields tablolar için eşleme öğeleri. Üretilen XML temel sonucu sipariş duyarlıdır küme.If sql:key-fields belirtilmemişse, oluşturulan XML düzgün biçimlendirilmiş değil.
Değeri sql:key-fields ilişki satırları benzersiz olarak tanıtan sütun/sütunları tanımlar. Bir satırı benzersiz olarak tanıtmak için gereken birden çok sütunu, sütun değerleri boşluklarla sınırlandırılır.
Kullanmanız gereken sql:key-fields bir öğe varsa, ek açıklamayı bir <SQL:Relationship> öğe alt öğe arasında tanımlanmış, ancak birincil anahtar olarak sağlamaz tablo üst öğesinde belirtilen.
Örnekler
Aşağıdaki örnekler kullanarak çalışma örnekleri oluşturmak için , belirli gereksinimleri karşılaması gerekir.Daha fazla bilgi için bkz:SQLXML örnekleri çalıştırma gereksinimleri.
C.Iç içe uygun zamanı geçmiş üretir. <SQL:Relationship> yeterli bilgi sağlamaz
Bu örnek, yeri gösterir. sql:key-fields belirtilmeli.
Aşağıdaki şema göz önünde bulundurun.Şema arasında bir hiyerarşi belirtir <Sipariş> ve <Müşteri> öğeleri, <Sipariş> üst öğenin bulunduğu ve <Müşteri> bir alt öğesidir.
The <sql:relationship> tag is used to specify the parent-alt relationship. Sales.SalesOrderHeader, MüşteriNo belirlediği tablo the Sales.Customer MüşteriNo alt anahtarına başvuran bir ana anahtar olarak tablo.Sağlanan bilgileri <SQL:Relationship> Üst satırların benzersiz olarak tanıtmak yeterli değil tablo (Sales.SalesOrderHeader). Bu nedenle, olmadan sql:key-fields Ek açıklamayı oluşturulan sıradüzeni yanlış olur.
With sql:key-fields Belirtilen <Sipariş>, ek açıklamayı, üst satırları benzersiz olarak tanımlar (Sales.SalesOrderHeader tablo), ve alt öğeleri üst öğesi altında görüntülenir.
Bu şema oluşur:
<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>
Bu şemayı çalışma bir örneğini oluşturmak için
Yukarıdaki şema kodunu kopyalayıp, bir metin dosyasına yapıştırın.Dosyayı KeyFields1.xml kaydedin.
Şu şablonu kopyalayıp, bir metin dosyasına yapıştırın.Dosya KeyFields1T.xml KeyFields1.xml kaydettiğiniz aynı dizine kaydedin.XPath sorgusu şablondaki tüm döndürür <Sipariş> bir müşteri kimliği 3'den küçük olan öğeleri.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="KeyFields1.xml"> /Order[@CustomerID < 3] </sql:xpath-query> </ROOT>
Eşleştirme şemasını (KeyFields1.xml) dizini belirtilen şablon kaydedildiği göreli dizinidir.Mutlak bir yol da, örneğin belirtilebilir:
mapping-schema="C:\MyDir\KeyFields1.xml"
Oluşturun ve SQLXML 4.0 sınama komut dosyası (Sqlxml4test.vbs) şablonu yürütmek için kullanın.
Daha fazla bilgi için bkz: ADO SQLXML sorgu yürütmek işlemi için kullanma.
Bu, kısmi bir sonuç kümesinden oluşur:
<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.SQL:anahtar belirtme-sonuç doğru olarak iç içe oluşturmak için alanları
Aşağıdaki şemada kullanılarak belirtilen yok bir sıradüzeni yok <SQL:Relationship>. Şemada hala belirtme gerektirir sql:key-fields Çalışanlar tablosundaki HumanResources.Employee benzersiz olarak tanıtmak için ek açıklama.
<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>
Bu şemayı çalışma bir örneğini oluşturmak için
Yukarıdaki şema kodunu kopyalayıp, bir metin dosyasına yapıştırın.Dosyayı KeyFields2.xml kaydedin.
Şu şablonu kopyalayıp, bir metin dosyasına yapıştırın.Dosya KeyFields2T.xml KeyFields2.xml kaydettiğiniz aynı dizine kaydedin.XPath sorgusu şablondaki tüm döndürür <HumanResources.Employee> öğeleri:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="KeyFields2.xml"> /HumanResources.Employee </sql:xpath-query> </ROOT>
Eşleştirme şemasını (KeyFields2.xml) dizini belirtilen şablon kaydedildiği göreli dizinidir.Mutlak bir yol da, örneğin belirtilebilir:
mapping-schema="C:\MyDir\KeyFields2.xml"
Oluşturun ve SQLXML 4.0 sınama komut dosyası (Sqlxml4test.vbs) şablonu yürütmek için kullanın.
Daha fazla bilgi için bkz: ADO SQLXML sorgu yürütmek işlemi için kullanma.
Bu sonucu oluşur:
<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>