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ı
Diğer veritabanı güncelleme mekanizmaları gibi, updategramlar da çoklu kullanıcılı ortamda veri güncellemeleriyle eşzamanlı olarak ilgilenmek zorundadır. Updategramlar, seçilen alan verilerinin karşılaştırılmasını anlık görüntü olarak kullanarak, güncellenecek verilerin veritabanından okunduğundan sonra başka bir kullanıcı uygulaması tarafından değiştirilmediğinden emin olmak için Optimistic Concurrency Control (İyimser Eşdeğerlilik Kontrolü) kullanır. Updategramlar, bu anlık görüntü değerlerini <updategramların before> bloğunda içerir. Veritabanını güncellemeden önce, updategram öncesinde belirtilen değerleri <> veritabanındaki mevcut değerlerle karşılaştırarak güncellemenin geçerli olduğundan emin olur.
İyimser Uyum Kontrolü, bir güncelleme gramında üç seviye koruma sunar: düşük (hiçbiri), orta seviye ve yüksek. Hangi koruma seviyesine ihtiyacınız olduğuna göre güncelleme gramını belirterek karar verebilirsiniz.
En Düşük Koruma Seviyesi
Bu seviye, veritabanının son okunmasından bu yana yapılan diğer güncellemelere referans olmadan işlenen kör bir güncellemedir. Böyle bir durumda, kaydı tanımlamak için öncesi<> blokta sadece birincil anahtar sütun(lar)ını belirtirsiniz ve güncellenmiş bilgileri after<> blokta belirtirsiniz.
Örneğin, aşağıdaki güncelleme numarasındaki yeni iletişim telefon numarası, önceki telefon numarası ne olursa olsun doğrudur. Before bloğunun <> sadece birincil anahtar sütununu (ContactID) belirttiğine dikkat edin.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:before>
<Person.Contact ContactID="1" />
</updg:before>
<updg:after>
<Person.Contact ContactID="1" Phone="111-111-1111" />
</updg:after>
</updg:sync>
</ROOT>
Orta Koruma Seviyesi
Bu koruma seviyesinde, updategram, güncellenen verinin mevcut değer(lerini) veritabanı sütunlarındaki değerlerle karşılaştırır ve kayıt işleminiz tarafından okunduğundan beri değerlerin başka bir işlem tarafından değiştirilmediğinden emin olur.
Bu koruma seviyesini, öncesinde<> güncellediğiniz ana anahtar sütun(lar)ı ve sütun(lar)ı belirterek elde edebilirsiniz.
Örneğin, bu updategram, ContactID 1 olan kişi için Person.Contact tablosunun Telefon sütunundaki değeri değiştirir. Before> bloğu<, güncellenmiş değeri uygulamadan önce bu öznitelik değerinin veritabanındaki ilgili sütundaki değerle eşleşmesini sağlamak için Phone özniteliğini belirtir.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:before>
<Person.Contact ContactID="1" Phone="398-555-0132" />
</updg:before>
<updg:after>
<Person.Contact ContactID="1" Phone="111-111-1111" />
</updg:after>
</updg:sync>
</ROOT>
Yüksek Koruma Seviyesi
Yüksek düzeyde koruma, başvurunuzun o kaydı son okuduğundan beri kaydın aynı kalmasını sağlar (yani, başvurunuz kaydı okuduğu için başka bir işlemle değiştirilmemiştir).
Eşzamanlı güncellemelere karşı bu yüksek düzeyde korumayı elde etmenin iki yolu vardır:
Tabloda< önceki> blokta ek sütunlar belirtin.
Before bloğunda <> ek sütunlar belirtirseniz, updategram bu sütunlar için belirtilen değerleri, güncelleme uygulamadan önce veritabanında bulunan değerlerle karşılaştırır. İşleminiz kaydı okuduğundan beri kayıt sütunlarından herhangi biri değiştiyse, updategram güncellemeyi gerçekleştirmez.
Örneğin, aşağıdaki updategram shift adını günceller, ancak before> bloğunda< ek sütunlar (StartTime, EndTime) belirtir; böylece eşzamanlı güncellemelere karşı daha yüksek koruma seviyesi talep edilir.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram"> <updg:sync > <updg:before> <HumanResources.Shift ShiftID="1" Name="Day" StartTime="1900-01-01 07:00:00.000" EndTime="1900-01-01 15:00:00.000" /> </updg:before> <updg:after> <HumanResources.Shift Name="Morning" /> </updg:after> </updg:sync> </ROOT>Bu örnek, önceki> bloktaki kayıt< için tüm sütun değerlerini belirterek en yüksek koruma seviyesini belirtir.
Önce bloğunda zaman damgası sütununu (varsa) <belirtin.>
Before bloğundaki tüm kayıt sütunlarını <> belirtmek yerine, sadece zaman damgası sütununu (tabloda varsa) ve öncedeki<> birincil anahtar sütun(lar)ı belirtebilirsiniz. Veritabanı, kayıt güncellemesinden sonra zaman damgası sütununu benzersiz bir değere günceller. Bu durumda, updategram zaman damgasının değerini veritabanındaki karşılık gelen değerle karşılaştırır. Veritabanında saklanan zaman damgası değeri ikili bir değerdir. Bu nedenle, zaman damgası sütunu şemada dt:type="bin.hex", dt:type="bin.base64" veya sql:datatype="timestamp" olarak belirtilmelidir. (Ya xml veri tipini ya da Microsoft SQL Server veri tipini belirtebilirsiniz.)
Güncelleme gramını test etmek için
tempdb veritabanında şu tabloyu oluşturun:
USE tempdb CREATE TABLE Customer ( CustomerID varchar(5), ContactName varchar(20), LastUpdated timestamp)Bu örnek albümü ekleyin:
INSERT INTO Customer (CustomerID, ContactName) VALUES ('C1', 'Andrew Fuller')Aşağıdaki XSD şemasını kopyalayıp Notepad'e yapıştırın. Kaydet ConcurrencySampleSchema.xml:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"> <xsd:element name="Customer" sql:relation="Customer" > <xsd:complexType> <xsd:attribute name="CustomerID" sql:field="CustomerID" type="xsd:string" /> <xsd:attribute name="ContactName" sql:field="ContactName" type="xsd:string" /> <xsd:attribute name="LastUpdated" sql:field="LastUpdated" type="xsd:hexBinary" sql:datatype="timestamp" /> </xsd:complexType> </xsd:element> </xsd:schema>Aşağıdaki updategram kodunu Notepad'e kopyalayın ve önceki adımda oluşturulan şemayı kaydettiğiniz dizine ConcurrencySampleTemplate.xml olarak kaydedin. (Aşağıdaki zaman damgası değeri, örnek Müşteri tablonuzda farklı olacaktır, bu yüzden LastUpdate'in gerçek değerini tablodan kopyalayın ve güncelleme gramına yapıştırın.)
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram"> <updg:sync mapping-schema="SampleSchema.xml" > <updg:before> <Customer CustomerID="C1" LastUpdated = "0x00000000000007D1" /> </updg:before> <updg:after> <Customer ContactName="Robert King" /> </updg:after> </updg:sync> </ROOT>Ş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="Customer" >
<AttributeType name="CustomerID" />
<AttributeType name="ContactName" />
<AttributeType name="LastUpdated" dt:type="bin.hex"
sql:datatype="timestamp" />
<attribute type="CustomerID" />
<attribute type="ContactName" />
<attribute type="LastUpdated" />
</ElementType>
</Schema>