Udostępnij za pośrednictwem


Jak Utworzyć migawkę dla publikacji korespondencji seryjnej za pomocą sparametryzowanych filtrów (Programowanie replikacji Transact-SQL)

Podczas generowania migawkas publikacji przy użyciu sparametryzowana filtry, najpierw należy wygenerować standardowy lub schemat, migawka zawierający wszystkie publikowane dane i metadane subskrybenta subskrypcja.Aby uzyskać więcej informacji, zobacz Jak Tworzenie migawki początkowego (Programowanie replikacji Transact-SQL).Po utworzeniu migawka schematu, można wygenerować migawkę, zawierający partycję specyficzne dla subskrybenta opublikowanych danych.

Korzystając z procedur przechowywanych i agenta migawki, można:

  • Zezwalaj na subskrybentów żądanie migawka generacji i aplikacji pierwszego czas ich synchronizowania.

  • Wstępnie wygenerować migawek dla każdej partycji.

  • Ręcznie wygenerować migawka dla każdego subskrybenta.

    Uwaga zabezpieczeń, gdy to możliwe, monitują użytkowników o wprowadzenie poświadczenia zabezpieczeń w czasie wykonywania.Jeśli poświadczenia muszą być przechowywane w pliku skryptu, należy zabezpieczyć plik, aby uniemożliwić nieautoryzowany dostęp.

Aby utworzyć publikacja, która umożliwia abonentów do inicjowania generacji migawka i dostawy

  1. Wydawca na baza danych publikacja, wykonanie sp_addmergepublication (języka Transact-SQL).Określić następujące parametry:

    • Nazwa publikacja dla publikacja @.

    • Wartość true dla @ allow_subscriber_initiated_snapshot, umożliwiający abonentów zainicjować proces migawka.

    • (Opcjonalnie) Liczba dynamiczna migawka procesów, które można uruchomić jednocześnie dla @ max_concurrent_dynamic_snapshots.Jeśli maksymalna liczba procesów jest uruchomiony i subskrybenta próby generowania migawka, proces jest umieszczana w kolejce.Domyślnie jest nieograniczona liczba jednoczesnych procesów.

  2. Wydawca, należy wykonać sp_addpublication_snapshot (języka Transact-SQL).Określ nazwę publikacja, w kroku 1 dla publikacja @ i Microsoft poświadczenia systemu Windows, w którym Agent replikacji migawki działa dla @ job_login i hasło @.If the agent will use SQL Server Authentication when connecting to the Publisher, you must also specify a value of 0 for @publisher_security_mode and the Microsoft SQL Server login information for @publisher_login and @publisher_password.Tworzy zadanie agenta migawkę w publikacja.Aby uzyskać więcej informacji na temat generowania migawka początkowa i definiowanie niestandardowych harmonogramu dla agenta migawki, zobacz Jak Tworzenie migawki początkowego (Programowanie replikacji Transact-SQL).

    Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

    Podczas konfigurowania Publisher z dystrybutor zdalny, wartości dostarczone dla wszystkich parametrów, łącznie z job_login i job_password, są wysyłane do dystrybutora jako zwykły tekst.Należy zaszyfrować połączenie między wydawcy i jego dystrybutor zdalny przed wykonywania tej procedura składowana.Aby uzyskać więcej informacji, zobacz Szyfrowania połączeńSQL Server.

  3. Wykonanie sp_addmergearticle (języka Transact-SQL) dodać artykułów do publikacja.Ta procedura składowana muszą być wykonane raz dla każdego artykuł w publikacja.Podczas używania sparametryzowanych filtry, należy określić sparametryzowany filtr wierszy dla jednego lub więcej artykułów za pomocą @ subset_filterclause parametru.Aby uzyskać więcej informacji, zobacz Jak Definiowanie i modyfikowanie filtru sparametryzowana wiersz artykuł korespondencji seryjnej (Programowanie replikacji Transact-SQL).

  4. Jeśli inne artykuły będą filtrowane na podstawie sparametryzowany filtr wierszy, wykonanie sp_addmergefilter (języka Transact-SQL) do definiowania łączyć lub rekord logiczny relacje między artykułami.Ta procedura składowana muszą być wykonane raz dla każdej relacji jest zdefiniowana.Aby uzyskać więcej informacji, zobacz Jak Definiowanie i modyfikowanie filtru sprzężenia między artykuły korespondencji seryjnej (Programowanie replikacji Transact-SQL).

  5. Gdy Agent scalanie żąda migawka, aby zainicjować subskrybenta, migawka żądanie subskrypcja partycji jest generowany automatycznie.

Tworzenie publikacja i wstępnie wygenerować lub automatyczne odświeżanie migawki

  1. Wykonanie sp_addmergepublication (języka Transact-SQL) do tworzenia publikacja.Aby uzyskać więcej informacji, zobacz Jak Tworzenie publikacji (Programowanie replikacji Transact-SQL).

  2. Wydawca, należy wykonać sp_addpublication_snapshot (języka Transact-SQL).Określ nazwę publikacja, w kroku 1 dla publikacja @ i poświadczenia systemu Windows, na jakich Agent migawki jest uruchamiany dla @ job_login i hasło @.Jeśli będzie używać agenta SQL Server uwierzytelniania podczas łączenia się z Wydawca, należy także określić wartość 0 dla @ publisher_security_mode i SQL Server informacji logowania dla @ publisher_login i @ publisher_password.Tworzy zadanie agenta migawkę w publikacja.Aby uzyskać więcej informacji na temat generowania migawka początkowa i definiowanie niestandardowych harmonogramu dla agenta migawki, zobacz Jak Tworzenie migawki początkowego (Programowanie replikacji Transact-SQL).

    Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

    Podczas konfigurowania Publisher z dystrybutor zdalny, wartości dostarczone dla wszystkich parametrów, łącznie z job_login i job_password, są wysyłane do dystrybutora jako zwykły tekst.Należy zaszyfrować połączenie między wydawcy i jego dystrybutor zdalny przed wykonywania tej procedura składowana.Aby uzyskać więcej informacji, zobacz Szyfrowania połączeńSQL Server.

  3. Wykonanie sp_addmergearticle (języka Transact-SQL) dodać artykułów do publikacja.Ta procedura składowana muszą być wykonane raz dla każdego artykuł w publikacja.Podczas używania sparametryzowanych filtry, należy określić sparametryzowany filtr wierszy korzystania z jednego artykuł @ subset_filterclause parametru.Aby uzyskać więcej informacji, zobacz Jak Definiowanie i modyfikowanie filtru sparametryzowana wiersz artykuł korespondencji seryjnej (Programowanie replikacji Transact-SQL).

  4. Jeśli inne artykuły będą filtrowane na podstawie sparametryzowany filtr wierszy, wykonanie sp_addmergefilter (języka Transact-SQL) do definiowania łączyć lub rekord logiczny relacje między artykułami.Ta procedura składowana muszą być wykonane raz dla każdej relacji jest zdefiniowana.Aby uzyskać więcej informacji, zobacz Jak Definiowanie i modyfikowanie filtru sprzężenia między artykuły korespondencji seryjnej (Programowanie replikacji Transact-SQL).

  5. Wydawca na baza danych publikacja, wykonanie sp_helpmergepublication (języka Transact-SQL), określając wartość publikacja @ z kroku 1.Zanotuj wartość snapshot_jobid w zestaw wyników.

  6. Konwertowanie wartości snapshot_jobid uzyskane w kroku 5, aby uniqueidentifier.

  7. Wydawca na msdb bazy danych, wykonać sp_start_job (języka Transact-SQL), określając konwertowaną wartość uzyskana w kroku 6 dla @ job_id.

  8. Wydawca na baza danych publikacja, wykonanie sp_addmergepartition (języka Transact-SQL).Określ nazwę publikacja z kroku 1 dla publikacja @ i wartość używana do definiowania partycji dla @ suser_sname Jeśli SUSER_SNAME (Transact-SQL) jest używany w klauzula filtru lub @ host_name Jeśli HOST_NAME (Transact-SQL) jest używana w klauzula filtru.

  9. W programie publisher na baza danych publikacja, wykonanie sp_adddynamicsnapshot_job (języka Transact-SQL).Określ nazwę publikacja z kroku 1 dla publikacja @, wartość @ suser_sname lub @ host_name z kroku 8 i harmonogram dla zadanie.Spowoduje to utworzenie zadania, generuje sparametryzowana migawka dla określonej partycji.Aby uzyskać więcej informacji, zobacz Jak Określ harmonogramy synchronizacji (Programowanie replikacji Transact-SQL).

    Ostrzeżenie

    To zadanie jest wykonywane przy użyciu tego samego konta systemu Windows jako migawka początkowa zadania określone w kroku 2.Aby usunąć zadanie sparametryzowana migawka i jego partycji powiązanych danych wykonać sp_dropdynamicsnapshot_job (języka Transact-SQL).

  10. Wydawca na baza danych publikacja, wykonanie sp_helpmergepartition (języka Transact-SQL), określając wartość publikacja @ z kroku 1 i wartość @ suser_sname lub @ host_name z kroku 8.Zanotuj wartość dynamic_snapshot_jobid w zestaw wyników.

  11. U dystrybutora na msdb bazy danych, wykonać sp_start_job (języka Transact-SQL), określając wartość uzyskana w kroku 9 dla @ job_id.Uruchamia zadanie sparametryzowana migawka dla partycji.

  12. Powtórz kroki 8-11, aby wygenerować partycjonowana migawka dla subskrypcja.

Tworzenie publikacja i ręcznie tworzyć migawek dla każdej partycji

  1. Wykonanie sp_addmergepublication (języka Transact-SQL) do tworzenia publikacja.Aby uzyskać więcej informacji, zobacz Jak Tworzenie publikacji (Programowanie replikacji Transact-SQL).

  2. Wydawca, należy wykonać sp_addpublication_snapshot (języka Transact-SQL).Określ nazwę publikacja, w kroku 1 dla publikacja @ i poświadczenia systemu Windows, na jakich Agent migawki jest uruchamiany dla @ job_login i hasło @.Jeśli będzie używać agenta SQL Server uwierzytelniania podczas łączenia się z Wydawca, należy także określić wartość 0 dla @ publisher_security_mode i SQL Server informacji logowania dla @ publisher_login i @ publisher_password.Tworzy zadanie agenta migawkę w publikacja.Aby uzyskać więcej informacji na temat generowania migawka początkowa i definiowanie niestandardowych harmonogramu dla agenta migawki, zobacz Jak Tworzenie migawki początkowego (Programowanie replikacji Transact-SQL).

    Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

    Podczas konfigurowania Publisher z dystrybutor zdalny, wartości dostarczone dla wszystkich parametrów, łącznie z job_login i job_password, są wysyłane do dystrybutora jako zwykły tekst.Należy zaszyfrować połączenie między wydawcy i jego dystrybutor zdalny przed wykonywania tej procedura składowana.Aby uzyskać więcej informacji, zobacz Szyfrowania połączeńSQL Server.

  3. Wykonanie sp_addmergearticle (języka Transact-SQL) dodać artykułów do publikacja.Ta procedura składowana muszą być wykonane raz dla każdego artykuł w publikacja.Podczas używania sparametryzowanych filtry, należy określić sparametryzowany filtr wierszy dla co najmniej jeden artykuł przy użyciu @ subset_filterclause parametru.Aby uzyskać więcej informacji, zobacz Jak Definiowanie i modyfikowanie filtru sparametryzowana wiersz artykuł korespondencji seryjnej (Programowanie replikacji Transact-SQL).

  4. Jeśli inne artykuły będą filtrowane na podstawie sparametryzowany filtr wierszy, wykonanie sp_addmergefilter (języka Transact-SQL) do definiowania łączyć lub rekord logiczny relacje między artykułami.Ta procedura składowana muszą być wykonane raz dla każdej relacji jest zdefiniowana.Aby uzyskać więcej informacji, zobacz Jak Definiowanie i modyfikowanie filtru sprzężenia między artykuły korespondencji seryjnej (Programowanie replikacji Transact-SQL).

  5. Rozpocznij zadanie migawka lub uruchomić agenta replikacji migawka wiersz polecenia do generowania schematu standardowych migawka i innych plików.Aby uzyskać więcej informacji, zobacz Jak Tworzenie migawki początkowego (Programowanie replikacji Transact-SQL).

  6. Agent migawki replikacji ponownie uruchom wiersz polecenia, aby wygenerować luzem, pliki kopii (.bcp), określając lokalizację partycjonowana migawka dla - dynamicsnapshotlocation i jedną lub obie następujące właściwości, które definiuje partycję:

  7. Powtórz kroki 6 do generowania partycjonowana migawka dla subskrypcja.

  8. Uruchom agenta scalania dla subskrypcja stosowanie wstępnego partycjonowana migawka u abonentów, określając następujące właściwości:

    • -Hostname -wartość używana do definiowania partycji, jeśli rzeczywista wartość HOST_NAME jest zastępowana.

    • -DynamicSnapshotLocation -lokalizację dynamiczna migawka dla tej partycji.

Ostrzeżenie

Aby uzyskać więcej informacji na temat programowania agenci replikacja, zobacz Pojęcia dotyczące plików wykonywalnych Agent replikacji.

Przykład

W tym przykładzie tworzony publikacja korespondencji seryjnej z filtrami sparametryzowana, gdzie subskrybentów zainicjowania procesu tworzenia migawka.Wartości @ job_login i @ job_password są przekazywane za pomocą wykonywanie skryptów zmiennych.

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

--Add a new merge publication.
DECLARE @publicationdb AS sysname;
DECLARE @publication AS sysname;
DECLARE @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @filter AS sysname;
DECLARE @schema_hr AS sysname;
DECLARE @schema_sales AS sysname;

SET @publicationdb = N'AdventureWorks2008R2';
SET @publication = N'AdvWorksSalesPersonMerge';
SET @table1 = N'Employee';
SET @table2 = N'SalesPerson';
SET @filter = N'SalesPerson_Employee';
SET @schema_hr = N'HumanResources';
SET @schema_sales = N'Sales';

USE [AdventureWorks2008R2];

-- Enable AdventureWorks2008R2 for merge replication.
EXEC sp_replicationdboption
  @dbname = @publicationdb,
  @optname = N'merge publish',
  @value = N'true';  

-- Create new merge publication with Subscriber requested snapshot
-- and using the default agent schedule. 
EXEC sp_addmergepublication 
  @publication = @publication, 
  @description = N'Merge publication of AdventureWorks2008R2.', 
  @allow_subscriber_initiated_snapshot = N'true',
  @publication_compatibility_level = N'90RTM';

-- Create a new snapshot job for the publication, using the default schedule.
-- Pass credentials at runtime using sqlcmd scripting variables.
EXEC sp_addpublication_snapshot 
  @publication = @publication, 
  @job_login = $(login), 
  @job_password = $(password);

-- Add an article for the Employee table, 
-- which is horizontally partitioned using 
-- a parameterized row filter.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table1, 
  @source_owner = @schema_hr, 
  @source_object = @table1, 
  @type = N'table', 
  @description = 'contains employee information', 
  @subset_filterclause = N'[LoginID] = HOST_NAME()';

-- Add an article for the SalesPerson table, 
-- which is partitioned based on a join filter.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table2, 
  @source_owner = @schema_sales, 
  @source_object = @table2, 
  @type = N'table', 
  @description = 'contains salesperson information';

-- Add a join filter between the two articles.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table1, 
  @filtername = @filter, 
  @join_articlename = @table2, 
  @join_filterclause = N'[Employee].[BusinessEntityID] = [SalesPerson].[SalesPersonID]', 
  @join_unique_key = 1, 
  @filter_type = 1;
GO

-- Start the agent job to generate the full snapshot for the publication.
-- The filtered data snapshot is generated automatically the first time 
-- the subscription is synchronized. 
DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesPersonMerge';

EXEC sp_startpublication_snapshot 
  @publication = @publication;
GO

W tym przykładzie tworzony publikacja przy użyciu filtru sparametryzowana, gdzie każdy abonent ma jego partycję zdefiniowane przez wykonywanie sp_addmergepartition i utworzone przez wykonywanie zadanie filtrowane migawka sp_adddynamicsnapshot_job przekazywanie informacji partycjonowanie na partycje.Wartości @ job_login i @ job_password są przekazywane za pomocą wykonywanie skryptów zmiennych.

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

--Add a new merge publication.
DECLARE @publicationdb AS sysname;
DECLARE @publication AS sysname;
DECLARE @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @filter AS sysname;
DECLARE @schema_hr AS sysname;
DECLARE @schema_sales AS sysname;

SET @publicationdb = N'AdventureWorks2008R2';
SET @publication = N'AdvWorksSalesPersonMerge';
SET @table1 = N'Employee';
SET @table2 = N'SalesPerson';
SET @filter = N'SalesPerson_Employee';
SET @schema_hr = N'HumanResources';
SET @schema_sales = N'Sales';

USE [AdventureWorks2008R2];

-- Enable AdventureWorks2008R2 for merge replication.
EXEC sp_replicationdboption
  @dbname = @publicationdb,
  @optname = N'merge publish',
  @value = N'true';  

-- Create new merge publication.  
EXEC sp_addmergepublication 
  @publication = @publication, 
  @description = N'Merge publication of AdventureWorks2008R2.', 
  @allow_subscriber_initiated_snapshot = N'false';

-- Create a new snapshot job for the publication, using the 
-- default schedule. Pass credentials at runtime using 
-- sqlcmd scripting variables.
EXEC sp_addpublication_snapshot 
  @publication = @publication, 
  @job_login = $(Login), 
  @job_password = $(password);

-- Add an article for the Employee table, 
-- which is horizontally partitioned using 
-- a parameterized row filter.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table1, 
  @source_owner = @schema_hr, 
  @source_object = @table1, 
  @type = N'table', 
  @description = 'contains employee information', 
  @subset_filterclause = N'[LoginID] = HOST_NAME()';

-- Add an article for the SalesPerson table, 
-- which is partitioned based on a join filter.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table2, 
  @source_owner = @schema_sales, 
  @source_object = @table2, 
  @type = N'table', 
  @description = 'contains customer information';

-- Add a join filter between the two articles.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table1, 
  @filtername = @filter, 
  @join_articlename = @table2, 
  @join_filterclause = N'[Employee].[BusinessEntityID] = [SalesPerson].[SalesPersonID]', 
  @join_unique_key = 1, 
  @filter_type = 1;
GO

-- Start the snapshot agent job.
DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesPersonMerge';

EXEC sp_startpublication_snapshot 
  @publication = @publication;
GO

PRINT '*** Waiting for the initial snapshot.';
GO

-- Create a temporary table to store the filtered data snapshot 
-- job information.
CREATE TABLE #temp (id int,
    job_name sysname,
    job_id uniqueidentifier,
    dynamic_filter_login sysname NULL,
    dynamic_filter_hostname sysname NULL,
    dynamic_snapshot_location nvarchar(255),
    frequency_type int, 
    frequency_interval int, 
    frequency_subday_type int,
    frequency_subday_interval int, 
    frequency_relative_interval int, 
    frequency_recurrence_factor int, 
    active_start_date int, 
    active_end_date int, 
    active_start_time int, 
    active_end_time int
)

-- Create each snapshot for a partition 
-- The initial snapshot must already be generated.
DECLARE @publication AS sysname;
DECLARE @jobname AS sysname
DECLARE @hostname AS sysname
SET @publication = N'AdvWorksSalesPersonMerge';
SET @hostname = N'adventure-works\Fernando';

WHILE NOT EXISTS(SELECT * FROM sysmergepublications 
    WHERE [name] = @publication 
    AND snapshot_ready = 1)
BEGIN
    WAITFOR DELAY '00:00:05'
END

-- Create a data partition by overriding HOST_NAME().
EXEC sp_addmergepartition 
  @publication = @publication,
  @host_name = @hostname;

-- Create the filtered data snapshot job, and use the returned 
-- information to start the job.
EXEC sp_adddynamicsnapshot_job 
  @publication = @publication,
  @host_name = @hostname;

INSERT INTO #temp (id, job_name, job_id, dynamic_filter_login,
    dynamic_filter_hostname, dynamic_snapshot_location,
    frequency_type, frequency_interval, frequency_subday_type,
    frequency_subday_interval, frequency_relative_interval, 
    frequency_recurrence_factor, active_start_date, active_end_date, 
    active_start_time,active_end_time)
EXEC sp_helpdynamicsnapshot_job;

SELECT @jobname = (SELECT DISTINCT job_name FROM #temp WHERE dynamic_filter_hostname = @hostname);

EXEC msdb..sp_start_job @job_name = @jobname;
DROP TABLE #temp;
GO

W tym przykładzie tworzony publikacja przy użyciu filtru sparametryzowana, gdzie każdy abonent musi mieć jego partycjonowanie danych i migawka filtrowane zadanie utworzone przez dostarczanie informacji partycjonowanie na partycje.Subskrybent dostarcza informacji partycjonowanie na partycje przy użyciu parametrów wiersza polecenia podczas ręcznego uruchamiania agenci replikacja.W tym przykładzie założono subskrypcja do publikacja również zostały utworzone.

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

--Add a new merge publication.
DECLARE @publicationdb AS sysname;
DECLARE @publication AS sysname;
DECLARE @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @filter AS sysname;
DECLARE @schema_hr AS sysname;
DECLARE @schema_sales AS sysname;

SET @publicationdb = N'AdventureWorks2008R2';
SET @publication = N'AdvWorksSalesPersonMerge';
SET @table1 = N'Employee';
SET @table2 = N'SalesPerson';
SET @filter = N'SalesPerson_Employee';
SET @schema_hr = N'HumanResources';
SET @schema_sales = N'Sales';

USE [AdventureWorks2008R2];

-- Enable AdventureWorks2008R2 for merge replication.
EXEC sp_replicationdboption
  @dbname = @publicationdb,
  @optname = N'merge publish',
  @value = N'true';  

-- Create new merge publication.  
EXEC sp_addmergepublication 
  @publication = @publication, 
  @description = N'Merge publication of AdventureWorks2008R2.', 
  @allow_subscriber_initiated_snapshot = N'false';

-- Create a new snapshot job for the publication, using the 
-- default schedule. Pass credentials at runtime using 
-- sqlcmd scripting variables.
EXEC sp_addpublication_snapshot 
  @publication = @publication, 
  @job_login = $(Login), 
  @job_password = $(Password);

-- Add an article for the Employee table, 
-- which is horizontally partitioned using 
-- a parameterized row filter.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table1, 
  @source_owner = @schema_hr, 
  @source_object = @table1, 
  @type = N'table', 
  @description = 'contains employee information', 
  @subset_filterclause = N'[LoginID] = HOST_NAME()';

-- Add an article for the SalesPerson table, 
-- which is partitioned based on a join filter.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table2, 
  @source_owner = @schema_sales, 
  @source_object = @table2, 
  @type = N'table', 
  @description = 'contains customer information';

-- Add a join filter between the two articles.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table1, 
  @filtername = @filter, 
  @join_articlename = @table2, 
  @join_filterclause = N'[Employee].[BusinessEntityID] = [SalesPerson].[SalesPersonID]', 
  @join_unique_key = 1, 
  @filter_type = 1;
GO
REM Line breaks are added to improve readability. 
REM In a batch file, commands must be made in a single line.
REM Run the Snapshot agent from the command line to generate the standard snapshot 
REM schema and other files. 
SET DistPub=%computername%
SET PubDB=AdventureWorks2008R2 
SET PubName=AdvWorksSalesPersonMerge

"C:\Program Files\Microsoft SQL Server\100\COM\SNAPSHOT.EXE" -Publication %PubName%  
-Publisher %DistPub% -Distributor  %DistPub%  -PublisherDB %PubDB%  -ReplicationType 2  
-OutputVerboseLevel 1  -DistributorSecurityMode 1

PAUSE
REM Run the Snapshot agent from the command line, this time to generate 
REM the bulk copy (.bcp) data for each Subscriber partition.  
SET DistPub=%computername%
SET PubDB=AdventureWorks2008R2 
SET PubName=AdvWorksSalesPersonMerge
SET SnapshotDir=\\%DistPub%\repldata\unc\fernando

MD %SnapshotDir%

"C:\Program Files\Microsoft SQL Server\100\COM\SNAPSHOT.EXE" -Publication %PubName%  
-Publisher %DistPub%  -Distributor  %DistPub%  -PublisherDB %PubDB%  -ReplicationType 2  
-OutputVerboseLevel 1  -DistributorSecurityMode 1  -DynamicFilterHostName "adventure-works\Fernando"  
-DynamicSnapshotLocation %SnapshotDir%

PAUSE
REM Run the Merge Agent for each subscription to apply the partitioned 
REM snapshot for each Subscriber.  
SET Publisher = %computername%
SET Subscriber = %computername%
SET PubDB = AdventureWorks2008R2 
SET SubDB = AdventureWorks2008R2Replica 
SET PubName = AdvWorksSalesPersonMerge 
SET SnapshotDir=\\%DistPub%\repldata\unc\fernando

"C:\Program Files\Microsoft SQL Server\100\COM\REPLMERG.EXE" -Publisher  %Publisher%  
-Subscriber  %Subscriber%  -Distributor %Publisher%  -PublisherDB %PubDB%  
-SubscriberDB %SubDB% -Publication %PubName%  -PublisherSecurityMode 1  -OutputVerboseLevel 3  
-Output -SubscriberSecurityMode 1  -SubscriptionType 3 -DistributorSecurityMode 1  
-Hostname "adventure-works\Fernando"  -DynamicSnapshotLocation %SnapshotDir%

PAUSE