Değişiklikler için işlem makaleleri nasıl yayılma belirtme
Işlem çoğaltma, veri değişiklikleri abonelerine yayımcıdan nasıl yayılır belirlemenizi sağlar.Yayımlanan her tablo için (INSERT, UPDATE veya DELETE) her operasyon için abone dağıtılmasını dört şekilde belirtebilirsiniz:
Işlem çoğaltma değişiklikleri aboneleri (varsayılan) için saklı bir yordam dışarı ve daha sonra komut dosyası çağırın belirtin.
INSERT, UPDATE veya DELETE deyim kullanarak değişiklik dağıtılmasını olduğunu belirtin (varsayılan değeri olmayan-SQL Server Abonelerin).
Özel saklı yordam kullanılması gerektiğini belirtin.
Bu eylem tüm Abone tarafında gerçekleştirilmesi gerektiğini değil belirtin.Bu tür hareketler çoğaltılır.
Varsayılan olarak, işlem çoğaltma aboneleri yapılan yayılan bir küme her abone üzerinde yüklü olan saklı yordamlar.Bir ekleme, güncelleştirme veya silme oluşur bir tablo Yayımcı tarafında, işlem sırasında abone bir saklı yordam çağrısı çevrilir.Saklı yordam içindeki sütunları eşleştirmek parametreleri kabul tablo, bu sütun, Abone tarafında değiştirilmesine izin verir.
Için küme işlem makalelerine veri ilgili yayma yöntem değiştirir
SQL Server Management Studio: Nasıl Yapılır: Işlem makaleleri (SQL Server Management Studio'yu) veri değişiklikleri için yayılımı yöntemi küme
Çoğaltma Transact-SQL programlama: Nasıl Yapılır: Işlem makaleleri (çoğaltma programı Transact-SQL) veri değişiklikleri için yayılımı yöntemi küme
Varsayılan ve özel saklı yordamlarda
Her tablo makale için üç yordamlar, varsayılan olarak, çoğaltma oluşturur:
sp_MSins_<tabloadı>, ekler, bir işleme.
sp_MSupd_<tabloadı>, hangi güncelleştirmeleri işler.
sp_MSdel_<tabloadı>, siler, bir işleme.
The <tablename> used in the procedure depends on how the makale was added to the yayın and whether the abonelik veritabanı contains a tablo of the same name with a different owner.
Bu yordamlar, herhangi bir özel yordamla belirttiğiniz bir makale ekleme, değiştirilebilir bir yayın.Bir denetim içinde veri ekleme gibi özel mantık, bir uygulamayı gerektiriyorsa, özel yordamlar kullanılan tablo olduğunda, satır bir Abone tarafında güncelleştirildi.Özel saklı yordamlarda belirtme hakkında daha fazla bilgi için yukarıda listelenen konular nasıl bakın.
Çoğaltma yordamlar varsayılan veya özel yordamlar belirtirseniz, ayrıca her yordam çağrısının söz diziminin'nı belirtin (varsayılan yordamlar kullanırsanız, çoğaltma varsayılanları seçer).Çağrı sözdizimi yordamını ve ne kadar bilgi, her bir veri değişikliği için abone gönderilen sağlanan parametreleri yapısı belirler.Daha fazla bilgi için bu konudaki "Call sözdizimi için saklı yordamlar" bölümüne bakın.
Özel kullanma konuları yordamlar depolanan...
Özel saklı yordamlarda kullanırken, aşağıdaki konuları göz önünde bulundurun:
Mantık bir saklı yordam; desteklemesi gerekir Microsoft destek için özel bir mantığı sağlamaz.
Çoğaltma tarafından kullanılan hareketlerle çakışmaları önlemek için açık hareketler özel yordamlar kullanılmamalıdır.
Abone sırasında şemayı şema yayımcı sırasında genellikle aynıdır, ancak Publisher şemasının alt küme küme küme sütun süzme kullanılıyorsa da olabilir.Ancak, schema olarak dönüştürmek istiyorsanız, yayımcı üzerinde şemasının alt küme küme küme şema üzerinde abone değil, verileri taşınır SQL Server 2008 Integration Services (SSIS) (SSIS) önerilen çözümdür. Daha fazla bilgi için bkz: SQL Server Tümleştirme Hizmetleri.
Yayımlanmış bir tablo için şema değişikliklerini yaparsanız, özel yordamlar yeniden gerekir.Daha fazla bilgi için bkz: Özel işlem yordamlar, şema değişiklikleri Yansıt için yeniden oluşturuluyor.
Için 1'den büyük bir değer kullanırsanız -SubscriptionStreams parametre Dağıtım Aracısı'nın, birincil anahtar sütunlarını güncelleştirmelerin başarılı olduğundan emin olmalısınız.Örneğin:
update ... set pk = 2 where pk = 1 -- update 1 update ... set pk = 3 where pk = 2 -- update 2
Dağıtım aracı, birden fazla bağlantısı kullanıyorsa, bu iki güncelleştirmelerin farklı bağlantılar üzerinden yinelenmiş.Ilk 1 güncelleştirme uygulanırsa, hiçbir sorun yok; güncelleştirmesi 2 uygulanırsa 1 güncelleştirme henüz oluştuğu için önce onu '0 satır etkilenen' döndürecektir.Bu durum, satır bir güncelleştirme etkileniyorsanız, hata yükselterek varsayılan yordamlarda işlenir:
if @@rowcount = 0 if @@microsoftversion>0x07320000 exec sys.sp_MSreplraiserror 20598
Hatayı yükseltme güncelleştirmelerin başarılı olur, tek bir bağlantı, yeniden denemek için dağıtım aracısını zorlar.Özel saklı yordamlarda, benzer mantığı eklemeniz gerekir.
Sözdizimi için saklı yordamlar arayın...
Işlem çoğaltma tarafından kullanılan yordamları çağırmak için kullanılan sözdizimi beş seçenek vardır:
CALL sözdizimi.Ekler, güncelleştirmeleri ve silmeleri için kullanılabilir.Varsayılan olarak, çoğaltma ekler ve siler bu sözdizimini kullanır.
SCALL sözdizimi.Yalnızca güncelleştirmeleri için kullanılabilir.Varsayılan olarak, çoğaltma, güncelleştirmeleri bu sözdizimini kullanır.
MCALL sözdizimi.Yalnızca güncelleştirmeleri için kullanılabilir.
XCALL sözdizimi.Güncelleştirmeleri ve silmeleri için kullanılabilir.
vcall.Güncelleştirilebilir abonelikler için kullanılır.Yalnızca iç kullanım.
Her yöntemin, abone için yayılır veri miktarı değişir.Örneğin, gerçekte bir güncelleştirmeyle etkilenen sütun değerleri SCALL geçirir.XCALL, buna ek olarak, (veya bir güncelleştirmesinden etkilenen olup olmadığını) tüm sütunları gerektirir ve eski veri değerleri her sütun için.Çoğu durumda, SCALL güncelleştirmeleri için uygundur, ancak uygulama bir güncelleştirmesi sırasında tüm veri değerleri gerektiriyorsa, XCALL bu verir.
CALL sözdizimi
Saklı yordamlar INSERT
INSERT deyimleri işleme saklı yordamlar, eklenen tüm sütunların değerlerini gönderilir:c1, c2, c3,... cn
Saklı yordamlar UPDATE
UPDATE deyimleri işleme saklı yordamlar, özgün değerleri için birincil anahtar sütunlarını (hangi sütunların değiştirilmiş belirlemek için girişimde bulunulmaz.) ve ardından bu makale tanımlanan tüm sütunlar için güncelleştirilmiş değerleri gönderilir:c1, c2, c3,... cn, pkc1, pkc2, pkc3,... pkcn
Saklı yordamlar DELETE
DELETE deyimleri işleme saklı yordamlar için birincil anahtar sütunlarını değerler geçirildi:pkc1, pkc2, pkc3,... pkcn
SCALL sözdizimi
Saklı yordamlar UPDATE
UPDATE deyimi işleme saklı yordamlar, güncelleştirilmiş değişmiş olan, bir bit maskesi () tarafından izlenen birincil anahtar sütunları, özgün değerleri peşinden sütun değerleri geçirilecekbinary(n)) parametresi değiştirilen sütunları gösterir. Aşağıdaki örnekte, sütun2 (c2) değiştirildi:c1, , c3,... cn, pkc1, pkc2, pkc3,... pkcn, bitmask
MCALL sözdizimi
Saklı yordamlar UPDATE
UPDATE deyimi işleme saklı yordamlar, özgün değerleri için bir bit maskesi () tarafından izlenen birincil anahtar sütunları, ardından bu makale tanımlanan tüm sütunlar için güncelleştirilmiş değerleri geçirilecekbinary(n)) parametresi değiştirilen sütunlarını gösterir:c1, c2, c3,... cn, pkc1, pkc2, pkc3,... pkcn, bitmask
XCALL sözdizimi
Saklı yordamlar UPDATE
UPDATE deyimi işleme saklı yordamlar, özgün değerleri geçirilecek (görüntü önce) makalesinde tanımlanan tüm sütunlar için makale tanımlanan tüm sütunlar için güncelleştirilmiş değerleri (sonra görüntü) ve ardından:old-c1, old-c2, old-c3,... old-cn, c1, c2, c3,... cn,
Saklı yordamlar DELETE
DELETE deyimleri işleme saklı yordamlar, özgün geçirilecek (görüntü önce) makalesinde tanımlanan tüm sütunlar için değer:old-c1, old-c2, old-c3,... old-cn
Not
XCALL, kullanırken önce görüntü değerleri metin and Görüntü sütunlar, NULL olması beklenir.
Örnekler
Aşağıdaki yordamlar için oluşturulan varsayılan yordamlar olan Satıcı tablo (AdventureWorks) içinde Adventure Works Örnek Veritabanı'nı tıklatın.
--INSERT procedure using CALL syntax
create procedure [sp_MSins_PurchasingVendor]
@c1 int,@c2 nvarchar(15),@c3 nvarchar(50),@c4 tinyint,@c5 bit,@c6 bit,@c7 nvarchar(1024),@c8 datetime
as
begin
insert into [Purchasing].[Vendor](
[VendorID]
,[AccountNumber]
,[Name]
,[CreditRating]
,[PreferredVendorStatus]
,[ActiveFlag]
,[PurchasingWebServiceURL]
,[ModifiedDate]
)
values (
@c1
,@c2
,@c3
,@c4
,@c5
,@c6
,@c7
,@c8
)
end
go
--UPDATE procedure using SCALL syntax
create procedure [sp_MSupd_PurchasingVendor]
@c1 int = null,@c2 nvarchar(15) = null,@c3 nvarchar(50) = null,@c4 tinyint = null,@c5 bit = null,@c6 bit = null,@c7 nvarchar(1024) = null,@c8 datetime = null,@pkc1 int
,@bitmap binary(2)
as
begin
update [Purchasing].[Vendor] set
[AccountNumber] = case substring(@bitmap,1,1) & 2 when 2 then @c2 else [AccountNumber] end
,[Name] = case substring(@bitmap,1,1) & 4 when 4 then @c3 else [Name] end
,[CreditRating] = case substring(@bitmap,1,1) & 8 when 8 then @c4 else [CreditRating] end
,[PreferredVendorStatus] = case substring(@bitmap,1,1) & 16 when 16 then @c5 else [PreferredVendorStatus] end
,[ActiveFlag] = case substring(@bitmap,1,1) & 32 when 32 then @c6 else [ActiveFlag] end
,[PurchasingWebServiceURL] = case substring(@bitmap,1,1) & 64 when 64 then @c7 else [PurchasingWebServiceURL] end
,[ModifiedDate] = case substring(@bitmap,1,1) & 128 when 128 then @c8 else [ModifiedDate] end
where [VendorID] = @pkc1
if @@rowcount = 0
if @@microsoftversion>0x07320000
exec sp_MSreplraiserror 20598
end
go
--DELETE procedure using CALL syntax
create procedure [sp_MSdel_PurchasingVendor]
@pkc1 int
as
begin
delete [Purchasing].[Vendor]
where [VendorID] = @pkc1
if @@rowcount = 0
if @@microsoftversion>0x07320000
exec sp_MSreplraiserror 20598
end
go