Określanie, jak zmiany są rozpropagowane dla transakcji artykułów
replikacja transakcyjnej pozwala określić, jak zmiana danych jest przekazywana od Wydawca do subskrybentów.Dla każdej tabela opublikowana można określić jedną z następujących czterech metod, że każda operacja (INSERT, UPDATE lub DELETE) powinny być przenoszone na subskrybent:
Określ replikacja transakcyjnej powinno się za pomocą skryptu i następnie wywołać procedura przechowywana propagowanie zmian do subskrybentów (ustawienie domyślne).
Określa, że zmiany powinny być przenoszone za pomocą instrukcja INSERT, UPDATE lub DELETE (wartość domyślna dla nie-SQL Server Subskrybenci).
Określić używane niestandardowe procedura przechowywana.
Umożliwia określenie tej akcja nie należy wykonać w dowolnym subskrybent.Transakcji tego typu nie są replikowane.
Domyślnie replikacja transakcyjnej propaguje zmiany subskrybent zestaw procedur przechowywanych, które są zainstalowane na każdym subskrybent.Wstawiania, aktualizacji lub usuwania występuje w tabela Wydawca, operacja jest tłumaczona na wywołanie procedura przechowywana przez subskrybent.Procedura przechowywana akceptuje parametry, które są mapowane do kolumn w tabela, umożliwiając tych kolumn ma być zmieniony przez subskrybent.
Aby zestaw metoda propagacji danych zmienia się na artykuły transakcyjne
SQL Server Management Studio: Jak Ustawianie metoda propagacji do zmiany danych transakcyjnych artykuły (SQL Server Management Studio)
Replikacja programowania języka Transact-SQL: Jak zestaw Zmiany metoda propagacji danych transakcyjnych artykułów (Programowanie replikacja języka Transact-SQL)
Domyślnych i niestandardowych procedur przechowywanych
Trzy procedury replikacja tworzy domyślnie dla każdego artykuł tabela są:
sp_MSins_<nazwa_tabeli>, który obsługuje wstawia.
sp_MSupd_<nazwa_tabeli>, który obsługuje aktualizacje.
sp_MSdel_<nazwa_tabeli>, który obsługuje usuwa.
The <tablename> used in the procedure depends on how the artykuł was added to the publikacja and whether the baza danych subskrypcja contains a tabela of the same name with a different owner.
Dowolne z tych procedur można zastąpić procedurą niestandardowej określonej podczas dodawania artykuł na publikacja w sieci.Niestandardowe procedury są używane, jeśli aplikacja wymaga logiki niestandardowej, takich jak Wstawianie danych do tabela programu inspekcji po zaktualizowaniu wiersza przy subskrybent.Aby uzyskać więcej informacji na temat określania niestandardowych procedur przechowywanych zapoznaj się ze sposobem tematach wymienionych powyżej.
Jeśli określisz procedur replikacja domyślnych lub niestandardowych procedur, należy także określić Składnia wywołania dla każdej procedury (replikacja wybiera ustawienia domyślne, jeżeli skorzystać z procedur domyślne).Składnia wywołania określa strukturę parametry przekazywane do procedury oraz jaka informacja jest wysyłana do subskrybent w przypadku każdej zmiany danych.Aby uzyskać więcej informacji zobacz sekcję "Call składnia dla procedury przechowywane" w tym temacie.
Procedury przechowywane zagadnień związanych z korzystaniem z niestandardowego
Przy użyciu niestandardowych procedur przechowywanych, należy pamiętać o następujących zagadnień:
Logika musi obsługiwać w przechowywanej procedurze; Microsoft nie zapewnia pomocy technicznej dla logiki niestandardowej.
W celu uniknięcia konfliktów z transakcjami, używane przez replikację, transakcji jawnej nie należy używać w niestandardowych procedur.
Schematu subskrybent jest zwykle taka sama, jak w schemacie przez wydawcę, ale także może być podzbiór schematu Wydawca, jeśli używana jest filtrowanie kolumn.Jednak Chcąc przekształcić schematu jako danych zostanie przeniesiona ten schemat na subskrybent nie jest podzbiorem schematu Wydawca, SQL Server 2008 Integration Services (SSIS) (SSIS) jest zalecanym rozwiązaniem. Aby uzyskać więcej informacji zobacz SQL Server Integration Services.
Jeśli wprowadzisz zmiany schematu tabela opublikowane, niestandardowych procedur musi być generowany ponownie.Aby uzyskać więcej informacji zobacz Ponowne generowanie niestandardowych transakcyjne procedury odbicie zmiany schematu.
Jeśli używasz wartość większą niż 1 -SubscriptionStreams parametr agenta dystrybucji, należy się upewnić, że aktualizacje do kolumny klucz podstawowy są powiodło się.Na przykład:
update ... set pk = 2 where pk = 1 -- update 1 update ... set pk = 3 where pk = 2 -- update 2
Jeśli Agent dystrybucji używa więcej niż jedno połączenie, te dwie aktualizacje mogą być replikowane za pośrednictwem innych połączeń.Jeśli najpierw stosowany jest aktualizacja 1, istnieje problem, po zastosowaniu aktualizacji 2 najpierw przywrócone zostaną 0 wierszy wpływa ponieważ aktualizacja 1 nie ma jeszcze wystąpił.Ta sytuacja jest obsługiwany w procedurach domyślne przez zwiększenie błąd, jeśli nie wierszy mają być uwzględnione w aktualizacji:
if @@rowcount = 0 if @@microsoftversion>0x07320000 exec sys.sp_MSreplraiserror 20598
Podnoszenie błędu wymusza Agent dystrybucji, aby ponowić próbę aktualizacji za pośrednictwem jednego połączenia powiedzie się.Niestandardowe procedury przechowywane musi zawierać logiki podobne.
Wywołanie składni procedur przechowywanych
Możliwych jest pięć opcji dla używanych do wywoływania procedur stosowanych przy replikacja transakcyjnej składni:
Wywołaj składni.Można użyć do wstawia, aktualizacji i usuwania.Domyślnie replikacja używa następującej składni wstawia i usuwa.
Składnia SCALL.Można używać tylko aktualizacje.Domyślnie replikacja używa następującej składni w przypadku aktualizacji.
Składnia MCALL.Można używać tylko aktualizacje.
Składnia XCALL.Może służyć do aktualizacji i usuwania.
VCALL.Używana dla subskrypcji mogą być aktualizowane.Tylko do użytku wewnętrznego.
Każda metoda różni się z ilości danych, które są propagowane do subskrybent.Na przykład SCALL przekazuje wartości tylko dla kolumn, które rzeczywiście dotyczy aktualizacji.XCALL, natomiast wymaga wszystkie kolumna (niezależnie od tego, czy dotyczy aktualizacji lub nie) i stare dane wartości dla każdej kolumna.W wielu przypadkach SCALL jest odpowiednie aktualizacje, ale jeśli aplikacja wymaga wszystkich wartości danych podczas aktualizacji, XCALL pozwala na to.
Składnia polecenia CALL
INSERT procedur przechowywanych
Procedury przechowywane obsługi instrukcji INSERT zostanie przekazany wstawianych wartości dla wszystkich kolumn:c1, c2, c3,... cn
UPDATE procedur przechowywanych
Procedury przechowywane obsługi instrukcji UPDATE zostanie przekazany zaktualizowane wartości wszystkich kolumn zdefiniowanych w artykuł, a następnie oryginalne wartości dla kolumny klucz podstawowy (nie jest podejmowana próba określenia kolumn, które zostały zmienione.):c1, c2, c3,... cn, pkc1, pkc2, pkc3,... pkcn
DELETE procedur przechowywanych
Procedury przechowywane obsługi instrukcji DELETE zostanie przekazany wartości dla kolumny klucz podstawowy:pkc1, pkc2, pkc3,... pkcn
Składnia SCALL
UPDATE procedur przechowywanych
Procedury przechowywane obsługi instrukcji UPDATE będą przekazywane tylko dla tych kolumn, które uległy zmianie, następuje oryginalne wartości dla kolumny klucz podstawowy, a po nim (maskę bitową, zaktualizowane wartościbinary(n)) parametr, który wskazuje zmienione kolumny. W poniższym przykładzie kolumna 2 (c 2) nie zmienił się:c1, , c3,... cn, pkc1, pkc2, pkc3,... pkcn, bitmask
Składnia MCALL
UPDATE procedur przechowywanych
Procedury przechowywane obsługi instrukcji UPDATE zostanie przekazany zaktualizowane wartości wszystkich kolumn zdefiniowanych w artykuł, następuje oryginalne wartości dla kolumny klucz podstawowy, a po nim (maski bitowejbinary(n)) parametr, który wskazuje zmienione kolumny:c1, c2, c3,... cn, pkc1, pkc2, pkc3,... pkcn, bitmask
Składnia XCALL
UPDATE procedur przechowywanych
Procedury przechowywane obsługi instrukcji UPDATE zostanie przekazany oryginalnych wartości (przed obrazu) dla wszystkich kolumn zdefiniowanych w artykuł, a następnie zaktualizowane wartości (obraz po) dla wszystkich kolumn zdefiniowanych w artykuł:old-c1, old-c2, old-c3,... old-cn, c1, c2, c3,... cn,
DELETE procedur przechowywanych
Procedury przechowywane obsługi instrukcji DELETE zostanie przekazany oryginał (przed obrazu) wartości dla wszystkich kolumn zdefiniowanych w artykule:old-c1, old-c2, old-c3,... old-cn
Uwaga
Podczas korzystania z XCALL, przed wartości obrazu tekst and obraz kolumn oczekuje się mieć wartości NULL.
Przykłady
Poniższe procedury są procedury domyślne dla Tabela dostawcy (AdventureWorks) w Adventure Works Przykładowa baza danych.
--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
See Also