Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Bu konu, updategramda belirtilen eşleme şemasının (XSD veya XDR) güncellemeleri işlemek için nasıl kullanıldığını açıklar. Updategram'da, Microsoft SQL Server'daki öğeler ve öznitelikler için açıklamalı bir eşleme şemasının adını verebilirsiniz. Bir updategram'da bir eşleme şeması belirtildiğinde, updategram'da belirtilen eleman ve öznitelik adları, eşleme şemasındaki öğeler ve özniteliklerle eşlenmelidir.
Bir eşleme şeması belirtmek için, senkronizasyon> öğesinin mapping-schema özniteliğini< kullanırsınız. Aşağıdaki örnekler iki updategram göstermektedir: biri basit bir eşleme şeması kullanan, diğeri ise daha karmaşık bir şema kullanan.
Uyarı
Bu dokümantasyon, SQL Server'da şablonlar ve eşleme şema desteğine aşina olduğunuzu varsayıyor. Daha fazla bilgi için bkz. Açıklamalı XSD Şemalarına Giriş (SQLXML 4.0). XDR kullanan eski uygulamalar için bkz. Annotated XDR Schemas (SQLXML 4.0'da kullanımdan kaldırılmıştır).
Veri Tipleriyle Başa Çıkmak
Şema resim, ikili veya varbinerSQL Server veri tipini ( sql:datatype kullanılarak) belirtiyorsa ve XML veri tipi belirtmiyorsa, updategram XML veri tipinin ikili taban 64 olduğunu varsayar. Veriniz bin.base tipindeyse, bu türü açıkça belirtmeniz gerekir (dt:type=bin.base veya type="xsd:hexBinary").
Şema dateTime, date veya time XSD veri tipini belirtiyorsa, sql:datatype="dateTime" kullanarak ilgili SQL Server veri tipini de belirtmelisiniz.
SQL Server para tipi parametrelerini işlerken eşleme şemasında uygun düğümde sql:datatype="money" açıkça belirtmeniz gerekir.
Örnekler
Aşağıdaki örnekleri kullanarak çalışma örnekleri oluşturmak için, SQLXML Örneklerini Çalıştırma Gereksinimleri bölümünde belirtilen gereksinimleri karşılamanız gerekir.
A. Basit bir eşleme şemasıyla bir updategram oluşturmak
Aşağıdaki XSD şeması (SampleSchema.xml), Müşteri> öğesini Sales.Customer tablosuna eşleyen< bir eşleme şemasıdır:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Customer" sql:relation="Sales.Customer" >
<xsd:complexType>
<xsd:attribute name="CustID"
sql:field="CustomerID"
type="xsd:string" />
<xsd:attribute name="RegionID"
sql:field="TerritoryID"
type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Aşağıdaki updategram, Sales.Customer tablosuna bir kayıt ekler ve bu veriyi doğru şekilde tabloya eşlemek için önceki eşleme şemasına dayanır. Updategram'ın şemada tanımlanan aynı öğe adı olan< Customer'ı> kullandığına dikkat edin. Bu zorunludur çünkü updategram belirli bir şemayı belirtir.
Güncelleme gramını test etmek için
Yukarıdaki şema kodunu kopyalayıp metin dosyasına yapıştırın. Dosyayı SampleUpdateSchema.xmlolarak kaydet.
Aşağıdaki updategram şablonunu kopyalayıp metin dosyasına yapıştırın. Dosyayı aynı dizinde SampleUpdategram.xml olarak kaydet SampleUpdateSchema.xml.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram"> <updg:sync mapping-schema="SampleUpdateSchema.xml"> <updg:before> <Customer CustID="1" RegionID="1" /> </updg:before> <updg:after> <Customer CustID="1" RegionID="2" /> </updg:after> </updg:sync> </ROOT>Eşleme şeması (SampleUpdateSchema.xml) için belirtilen dizin yolu, şablonun kaydedildiği dizine görecelidir. Mutlak bir yol da belirtilebilir, örneğin:
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"Şablonu çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.
Daha fazla bilgi için bkz. SQLXML 4.0 Sorguları Yürütmek için ADO Kullanma.
Bu eşdeğer XDR şemasıdır:
<?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="Sales.Customer" >
<AttributeType name="CustID" />
<AttributeType name="RegionID" />
<attribute type="CustID" sql:field="CustomerID" />
<attribute type="RegionID" sql:field="TerritoryID" />
</ElementType>
</Schema>
B. Eşleme şemasında belirtilen ebeveyn-çocuk ilişkisi kullanılarak kayıt eklemek
Şema öğeleri ilişkilendirilebilir. sql:ilişki> öğesi,< şema öğeleri arasındaki ebeveyn-çocuk ilişkisini belirtir. Bu bilgi, birincil anahtar/yabancı anahtar ilişkisi olan ilgili tabloları güncellemek için kullanılır.
Aşağıdaki eşleme şeması (SampleSchema.xml) iki elemandan oluşur: <Düzen> ve <OD>:
<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="OrderOD"
parent="Sales.SalesOrderHeader"
parent-key="SalesOrderID"
child="Sales.SalesOrderDetail"
child-key="SalesOrderID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="OD"
sql:relation="Sales.SalesOrderDetail"
sql:relationship="OrderOD" >
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="ProductID" type="xsd:integer" />
<xsd:attribute name="UnitPrice" type="xsd:decimal" />
<xsd:attribute name="OrderQty" type="xsd:integer" />
<xsd:attribute name="UnitPriceDiscount" type="xsd:decimal" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="OrderDate" type="xsd:date" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Aşağıdaki güncelleme gramı, bu XSD şemasını kullanarak 43860 numaralı emir için yeni bir emir detay kaydı (<after blokta bir OD> elemanı) ekler.<> Mapping-schema özniteliği, updategram'da eşleme şemasını belirtmek için kullanılır.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema="SampleUpdateSchema.xml" >
<updg:before>
<Order SalesOrderID="43860" />
</updg:before>
<updg:after>
<Order SalesOrderID="43860" >
<OD ProductID="753" UnitPrice="$10.00"
Quantity="5" Discount="0.0" />
</Order>
</updg:after>
</updg:sync>
</ROOT>
Güncelleme gramını test etmek için
Yukarıdaki şema kodunu kopyalayıp metin dosyasına yapıştırın. Dosyayı SampleUpdateSchema.xmlolarak kaydet.
Yukarıdaki updategram şablonunu kopyalayıp metin dosyasına yapıştırın. Dosyayı aynı dizinde SampleUpdategram.xml olarak kaydet SampleUpdateSchema.xml.
Eşleme şeması (SampleUpdateSchema.xml) için belirtilen dizin yolu, şablonun kaydedildiği dizine görecelidir. Mutlak bir yol da belirtilebilir, örneğin:
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"Şablonu çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.
Daha fazla bilgi için bkz. SQLXML 4.0 Sorguları Yürütmek için ADO Kullanma.
Bu eşdeğer XDR şemasıdır:
<?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="OD" sql:relation="Sales.SalesOrderDetail" >
<AttributeType name="SalesOrderID" />
<AttributeType name="ProductID" />
<AttributeType name="UnitPrice" dt:type="fixed.14.4" />
<AttributeType name="OrderQty" />
<AttributeType name="UnitPriceDiscount" />
<attribute type="SalesOrderID" />
<attribute type="ProductID" />
<attribute type="UnitPrice" />
<attribute type="OrderQty" />
<attribute type="UnitPriceDiscount" />
</ElementType>
<ElementType name="Order" sql:relation="Sales.SalesOrderHeader" >
<AttributeType name="CustomerID" />
<AttributeType name="SalesOrderID" />
<AttributeType name="OrderDate" />
<attribute type="CustomerID" />
<attribute type="SalesOrderID" />
<attribute type="OrderDate" />
<element type="OD" >
<sql:relationship
key-relation="Sales.SalesOrderHeader"
key="SalesOrderID"
foreign-key="SalesOrderID"
foreign-relation="Sales.SalesOrderDetail" />
</element>
</ElementType>
</Schema>
C. XSD şemasında belirtilen ebeveyn-çocuk ilişkisi ve ters açıklama kullanılarak kayıt eklemek
Bu örnek, updategram mantığının güncellemeleri işlemek için XSD'de belirtilen ebeveyn-çocuk ilişkisini nasıl kullandığını ve ters annotasyonun nasıl kullanıldığını göstermektedir. Ters açıklama hakkında daha fazla bilgi için, sql:ilişki üzerinde sql:inverse Özniteliğinin Belirtilmesi (SQLXML 4.0) bölümüne bakınız.
Bu örnek, tempdb veritabanında aşağıdaki tabloların bulunduğunu varsayar:
Cust (CustomerID, CompanyName), buradaCustomerIDbirincil anahtardırOrd (OrderID, CustomerID), buradaCustomerIDtablodaki birincil anahtaraCustatıftaCustomerIDbulunan yabancı anahtardır.
Updategram, kayıtları Cust ve Ord tablolarına eklemek için aşağıdaki XSD şemasını kullanır:
<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" inverse="true"
parent="Ord"
parent-key="CustomerID"
child-key="CustomerID"
child="Cust"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Order" sql:relation="Ord">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Customer" sql:relationship="OrdCust"/>
</xsd:sequence>
<xsd:attribute name="OrderID" type="xsd:int"/>
<xsd:attribute name="CustomerID" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="Customer" sql:relation="Cust">
<xsd:complexType>
<xsd:attribute name="CustomerID" type="xsd:string"/>
<xsd:attribute name="CompanyName" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Bu örnekteki XSD şeması Müşteri> ve Sipariş öğelerine sahiptir< ve iki eleman arasında ebeveyn-çocuk ilişkisi belirler.>< Siparişi ana eleman olarak, Müşteriyi> ise ana eleman olarak< tanımlar<.>
Updategram işleme mantığı, ebeveyn-çocuk ilişkisi bilgilerini kullanarak kayıtların tablolara hangi sırayla ekleneceğini belirler. Bu örnekte, updategram mantığı önce bir kayıt eklemeye çalışır (<çünkü Order> ebeveyndir) ve ardından Cust tablosuna bir kayıt eklemeye çalışır (çünkü< Müşteri> çocuktur). Ancak, veritabanı tablo şemasında bulunan birincil anahtar/yabancı anahtar bilgisi nedeniyle, bu ekleme işlemi veritabanında yabancı anahtar ihlaline yol açar ve ekleme başarısız olur.
Güncelleme işlemi sırasında parent-child ilişkisini tersine çevirmesini updategram mantığına talimat vermek için, ilişki> öğesinde<ters açıklama belirtilir. Sonuç olarak, kayıtlar önce Cust tablosuna, sonra Ord tablosuna eklenir ve işlem başarılı olur.
Aşağıdaki updategram, belirtilen XSD şeması kullanılarak Ord tablosuna bir sipariş (OrderID=2) ve Cust tablosuna bir müşteri (CustomerID='AAAAA') ekler:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema="SampleUpdateSchema.xml" >
<updg:before/>
<updg:after>
<Order OrderID="2" CustomerID="AAAAA" >
<Customer CustomerID="AAAAA" CompanyName="AAAAA Company" />
</Order>
</updg:after>
</updg:sync>
</ROOT>
Güncelleme gramını test etmek için
tempdb veritabanında şu tabloları oluşturun:
USE tempdb CREATE TABLE Cust(CustomerID varchar(5) primary key, CompanyName varchar(20)) GO CREATE TABLE Ord (OrderID int primary key, CustomerID varchar(5) references Cust(CustomerID)) GOYukarıdaki şema kodunu kopyalayıp metin dosyasına yapıştırın. Dosyayı SampleUpdateSchema.xmlolarak kaydet.
Yukarıdaki updategram şablonunu kopyalayıp metin dosyasına yapıştırın. Dosyayı aynı dizinde SampleUpdategram.xml olarak kaydet SampleUpdateSchema.xml.
Eşleme şeması (SampleUpdateSchema.xml) için belirtilen dizin yolu, şablonun kaydedildiği dizine görecelidir. Mutlak bir yol da belirtilebilir, örneğin:
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"Şablonu çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.
Daha fazla bilgi için bkz. SQLXML 4.0 Sorguları Yürütmek için ADO Kullanma.