Udostępnij za pośrednictwem


Określanie sposobu zmiany są propagowane transakcyjnych artykułów

replikacja transakcyjnej pozwala określić, jak zmiany danych są propagowane z Wydawca do subskrybentów.Dla każdej tabela opublikowanych można określić cztery sposoby że abonent powinien propagowane każdej operacji (INSERT, UPDATE lub DELETE):

  • Określić, że replikacja transakcyjna powinna skryptu out, a następnie wywołać procedura składowana, aby propagować zmiany do subskrybentów (domyślnie).

  • Określa, że zmiany powinny być propagowane przy użyciu instrukcja INSERT, UPDATE lub DELETE (domyślnie dla nie-SQL Server abonentów).

  • Należy określić, że powinny być używane niestandardowe procedura składowana.

  • Określenie tej akcja nie powinna być przeprowadzana w dowolnym subskrybenta.Transakcje typu nie są replikowane.

Domyślnie replikacja transakcyjna propaguje zmiany subskrybentom przez zestaw procedur przechowywanych, które są zainstalowane na każdy subskrybenta.Insert, update lub delete występuje w tabela Wydawca, operacja jest tłumaczona na wywołanie procedura składowana przez subskrybenta.procedura składowana akceptuje parametry, które mapują kolumn w tabela, umożliwiając tych kolumn ma zostać zmieniony przez subskrybenta.

Aby zestaw zmiany metody propagacji danych transakcyjnych artykułów

Domyślne i niestandardowe procedury przechowywane

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.

<Nazwa_tabeli> używane w procedura zależy od sposobu artykuł został dodany do publikacja i czy baza danych subskrypcja zawiera tabela o tej samej nazwie z innego właściciela.

Dowolną z tych procedur można zastąpić procedurą niestandardowe określona podczas dodawania artykuł do publikacja.Niestandardowe procedury są używane, jeśli aplikacja wymaga logiki niestandardowej, takich jak wstawianie danych do tabela programu inspekcji po zaktualizowaniu wiersza przy subskrybenta.Aby uzyskać więcej informacji na temat określania niestandardowych procedur przechowywanych, zobacz jak tematy wymienione powyżej.

Jeśli określisz procedur replikacja domyślnych lub niestandardowych procedur, również określić Składnia wywołania dla każdej procedury (replikacja wybiera ustawienia domyślne, jeżeli za pomocą procedur domyślne).Składnia wywołania określa strukturę parametry podane w procedurze oraz jaka informacja jest wysyłana do subskrybenta z każdej zmiany danych.Aby uzyskać więcej informacji zobacz sekcję "Call składni dla przechowywane procedury" w tym temacie.

Zagadnienia dotyczące korzystania z niestandardowych procedur przechowywanych.

Przy użyciu niestandardowych procedur przechowywanych, należy pamiętać o następujące kwestie:

  • Musi obsługiwać logikę procedura składowana; MicrosoftLogika niestandardowe nie zapewniają obsługę.

  • Aby uniknąć konfliktów z transakcji używany przez replikacja, transakcje nie powinny być używane niestandardowe procedury.

  • Subskrybent schematu jest zwykle taka sama, jak schemat przez wydawcę, ale można także podzbiór schematu Wydawca, jeśli jest używane filtrowanie kolumn.Jednakże, jeśli trzeba przekształcać schematu jako danych jest przenoszony takie, że schemat na subskrybent nie jest podzbiór schematu Wydawca, SQL Server 2008 Integration Services (SSIS) ()SSIS) jest zalecanym rozwiązaniem.Aby uzyskać więcej informacji, zobacz SQL Server Integration Services.

  • Jeżeli wprowadzisz zmiany schematu tabela opublikowanych niestandardowe procedury muszą być regenerowane.Aby uzyskać więcej informacji, zobacz Ponowne generowanie niestandardowych transakcyjnych procedury, aby odzwierciedlić zmiany schematu.

  • Jeśli używasz wartość większą niż 1 - subscriptionstreams parametr agenta dystrybucji musi zapewnić, że aktualizacje do klucz podstawowy kolumny są pomyślne.Na przykład:

    update ... set pk = 2 where pk = 1 -- update 1
    update ... set pk = 3 where pk = 2 -- update 2
    

    Jeżeli więcej niż jedno połączenie korzysta z agenta dystrybucji, tych dwóch aktualizacji może być replikowane przez różnych połączeń.Jeśli najpierw stosowany jest aktualizacja 1, jest nie problemu; Jeśli po zastosowaniu aktualizacji 2 pierwsze zwróci "dotyczy wierszy 0" ponieważ nie nastąpiło jeszcze aktualizacji 1.Sytuacja ta jest obsługiwane w procedurach domyślne poprzez podnoszenie błąd, jeżeli wiersze nie zostały uwzględnione w aktualizacji:

    if @@rowcount = 0
        if @@microsoftversion>0x07320000
            exec sys.sp_MSreplraiserror 20598
    

    Podnoszenie błędu wymusza agenta dystrybucji ponownych prób aktualizacji za pośrednictwem pojedynczego połączenia kończy się pomyślnie.Niestandardowe przechowywane procedury musi zawierać logiki podobne.

Wywołanie składni procedur przechowywanych

Możliwych jest pięć opcji do składnia używana do wywoływania procedur stosowanych przez replikacja transakcyjna:

  • Składnia WYWOŁANIA.Służy do wstawiania, aktualizacji i usuwania.Domyślnie replikacja używa następującej składni dla wstawiania i usuwania.

  • Składnia SCALL.Można tylko aktualizacje.Domyślnie replikacja używa następującej składni aktualizacje.

  • Składnia MCALL.Można tylko aktualizacje.

  • Składnia XCALL.Może służyć do aktualizacji i usunięć.

  • VCALL.Używane dla aktualizowalnej subskrypcji.Tylko do użytku wewnętrznego.

Każda metoda różni się z danych, które są propagowane do subskrybenta.Na przykład SCALL przekazuje wartości tylko dla kolumn, które rzeczywiście dotyczy aktualizacji.XCALL, natomiast wymaga wszystkie kolumna (czy dotyczy aktualizacja, czy nie) i stare dane wartości dla każdej kolumna.W wielu przypadkach właściwe aktualizacje jest SCALL, ale jeśli aplikacja wymaga wszystkich wartości danych podczas aktualizacji, XCALL pozwala na to.

Składnia WYWOŁANIA

  • WSTAW procedur przechowywanych
    Procedury przechowywane obsługi instrukcji INSERT zostaną przekazane wstawionego wartości dla wszystkich kolumn:

    c1, c2, c3,... cn
    
  • AKTUALIZOWANIE procedur przechowywanych
    Procedury przechowywane obsługi instrukcji UPDATE zostanie przekazany zaktualizowane wartości dla wszystkich kolumn określonych w artykule następuje oryginalne wartości klucz podstawowy kolumn (nie jest podejmowana próba określenia, które kolumny zostały zmienione.):

    c1, c2, c3,... cn, pkc1, pkc2, pkc3,... pkcn
    
  • Usuń procedury przechowywane
    Procedury przechowywane obsługi instrukcji DELETE zostanie przekazany wartości klucz podstawowy kolumny:

    pkc1, pkc2, pkc3,... pkcn
    

Składnia SCALL

  • AKTUALIZOWANIE procedur przechowywanych
    Procedury przechowywane obsługi instrukcji UPDATE zostanie przekazany zaktualizowane wartości tylko dla tych kolumn, które uległy zmianie, następuje oryginalne wartości klucz podstawowy kolumny następuje maskę bitów (binary(n)) parametr, który wskazuje kolumny zmienione.W poniższym przykładzie kolumna 2 (c2) nie zmienił się:

    c1, , c3,... cn, pkc1, pkc2, pkc3,... pkcn, bitmask
    

Składnia MCALL

  • AKTUALIZOWANIE procedur przechowywanych
    Procedury przechowywane obsługi instrukcji UPDATE zostanie przekazany zaktualizowane wartości dla wszystkich kolumn określonych w artykule następuje oryginalne wartości klucz podstawowy kolumny następuje maskę bitów (binary(n)) parametr, który wskazuje zmienione kolumny:

    c1, c2, c3,... cn, pkc1, pkc2, pkc3,... pkcn, bitmask
    

Składnia XCALL

  • AKTUALIZOWANIE 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,
    
  • Usuń procedury przechowywane
    Procedury przechowywane obsługi instrukcji DELETE zostanie przekazany oryginał (przed obrazu) wartości dla wszystkich kolumn zdefiniowanych w artykuł:

    old-c1, old-c2, old-c3,... old-cn
    

    Ostrzeżenie

    Podczas korzystania z XCALL, przed wartości obrazu tekstu i obrazu kolumny spodziewa się wartości NULL.

Przykłady

Poniższe procedury są procedury domyślne dla dostawcy tabela w Adventure Works przykładowej bazy 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