Aracılığıyla paylaş


Nasıl yapılır: Bir birleştirme yayını ile parametreli süzgeçleri (çoğaltma Transact-SQL programlama) için bir Snapshot oluştur

Parametreli filtreleri kullanarak yayınlar için anlık görüntü oluştururken, öncelikle tüm yayımlanan veri ve abonelik abone meta veriler içeren, standart veya şema, bir anlık görüntü oluşturması gerekir.Daha fazla bilgi için bkz: Nasıl yapılır: Başlangıç anlık görüntüsü (çoğaltma Transact-SQL programlama) oluştur.şema anlık görüntüsü görüntüsünü oluşturduktan sonra abone özel bölüm yayımlanan veri içeren anlık görüntü oluşturabilirsiniz.

Saklı yordamları ve anlık görüntü Aracısı kullanarak şunları yapabilirsiniz:

  • Abonelerin isteği anlık görüntü görüntüsü oluşturma ve uygulama ilk izin saat bunlar eşitlemek.

  • Her bölüm için anlık görüntüleri pre-generate.

  • El ile anlık görüntü her abone için oluşturur.

    Güvenlik Notumümkün olduğunda, zamanında güvenlik kimlik bilgileri bilgilerini girmesini ister.Bir komut dosyasında kimlik bilgileri bilgilerini depolamak, yetkisiz erişimi önlemek için dosyayı güvenli gerekir.

Anlık görüntü oluşturma ve teslim başlatmak aboneleri izin veren bir yayın oluşturmak için

  1. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_addmergepublication (Transact-sql).Aşağıdaki parametreleri belirtme:

    • Yayını adını @ yayın.

    • Değeri, true için @ allow_subscriber_initiated_snapshot, abonelerine anlık görüntü işlemini başlatmak etkinleştirir.

    • (İsteğe bağlı) İçin birlikte çalışabilir dinamik anlık görüntü işlem sayısını @ max_concurrent_dynamic_snapshots.En fazla işlem sayısını çalışıyor ve bir abone bir anlık görüntü oluşturmak çalışır, işlem bir sıraya konur.Varsayılan olarak eşzamanlı işlemlerin sayısı için bir sınır yoktur.

  2. Yayımcı tarafında yürütmek sp_addpublication_snapshot (Transact-sql).Belirtmek için 1. adımda kullanılan yayın adı @ yayın ve Microsoft altında çalışacağı Windows kimlik bilgileri bilgilerini Çoğaltma Anlık Görüntü Aracısı için çalışan @ job_login ve @ parola.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.Bu bir anlık görüntü Aracısı iş yayın için oluşturur.Oluşturma hakkında daha fazla bilgi için bir ilk anlık görüntü ve Bkz: Anlık Görüntü Aracısı için özel bir zamanlama tanımlama, Nasıl yapılır: Başlangıç anlık görüntüsü (çoğaltma Transact-SQL programlama) oluştur.

    Güvenlik notuGüvenlik Notu

    Yayımcı ile yapılandırırken bir uzak Dağıtımcı, sağlanan da dahil olmak üzere tüm parametreler için değerler job_login ve job_password, için dağıtıcı düz metin olarak gönderilirBu saklı yordam yürütmeden önce Yayımcı ve kendi uzak dağıtımcı arasında bağlantı şifrelemek.Daha fazla bilgi için bkz: SQL Server bağlantıları şifreleme.

  3. Yürütme sp_addmergearticle (Transact-sql) yayın makaleleri eklemeBu saklı yordam her makale için bir kez yürütülmelidir yayın.Parametreli filtreleri kullanırken parametreli satır filtresi kullanarak bir veya daha fazla makaleler için belirtmek @ subset_filterclause parametresi.Daha fazla bilgi için bkz: Nasıl yapılır: Tanımla ve birleştirme makalesi (çoğaltma Transact-SQL programlama) parametreli satır filtre Değiştir.

  4. Diğer makaleler parametreli satır filtresi göre filtre uygulanır, yürütmek sp_addmergefilter (Transact-sql) birleştirmek veya makaleleri arasında mantıksal kayıt ilişkileri tanımlamak içinBu saklı yordam için tanımlanan her ilişki bir kez çalıştırılması gerekir.Daha fazla bilgi için bkz: Nasıl yapılır: Tanımla ve birleştirme makaleleri (çoğaltma Transact-SQL programlama) arasındaki birleşim filtre Değiştir.

  5. Birleştirme Aracısı abone başlatılamıyor anlık görüntü istediğinde, istekte bulunan abonelik 's bölüm için anlık görüntüyü otomatik olarak oluşturulur.

Bir yayın oluşturmak ve pre-generate veya anlık görüntüleri otomatik olarak yenilemek için

  1. Yürütme sp_addmergepublication (Transact-sql) oluşturmak yayın.Daha fazla bilgi için bkz: Nasıl yapılır: Bir yayını (çoğaltma Transact-SQL programlama) oluştur.

  2. Yayımcı tarafında yürütmek sp_addpublication_snapshot (Transact-sql).Belirtmek için 1. adımda kullanılan yayın adı @ yayın ve anlık görüntü Aracısı çalıştığı için Windows kimlik bilgileri bilgilerini @ job_login ve @ parola.Aracı kullanırsanız SQL Server Yayımcı bağlanırken kimlik doğrulama değeri de belirtmeniz gerekir 0 için @ publisher_security_mode ve SQL Server için oturum açma bilgilerini @ publisher_login ve publisher_password @.Bu bir anlık görüntü Aracısı iş yayın için oluşturur.Oluşturma hakkında daha fazla bilgi için bir ilk anlık görüntü ve Bkz: Anlık Görüntü Aracısı için özel bir zamanlama tanımlama, Nasıl yapılır: Başlangıç anlık görüntüsü (çoğaltma Transact-SQL programlama) oluştur.

    Güvenlik notuGüvenlik Notu

    Yayımcı ile yapılandırırken bir uzak Dağıtımcı, sağlanan da dahil olmak üzere tüm parametreler için değerler job_login ve job_password, için dağıtıcı düz metin olarak gönderilirBu saklı yordam yürütmeden önce Yayımcı ve kendi uzak dağıtımcı arasında bağlantı şifrelemek.Daha fazla bilgi için bkz: SQL Server bağlantıları şifreleme.

  3. Yürütme sp_addmergearticle (Transact-sql) yayın makaleleri eklemeBu saklı yordam her makale için bir kez yürütülmelidir yayın.Parametreli filtreleri kullanırken, bir makale kullanma parametreli satır filtresi belirtmek @ subset_filterclause parametresi.Daha fazla bilgi için bkz: Nasıl yapılır: Tanımla ve birleştirme makalesi (çoğaltma Transact-SQL programlama) parametreli satır filtre Değiştir.

  4. Diğer makaleler parametreli satır filtresi göre filtre uygulanır, yürütmek sp_addmergefilter (Transact-sql) birleştirmek veya makaleleri arasında mantıksal kayıt ilişkileri tanımlamak içinBu saklı yordam için tanımlanan her ilişki bir kez çalıştırılması gerekir.Daha fazla bilgi için bkz: Nasıl yapılır: Tanımla ve birleştirme makaleleri (çoğaltma Transact-SQL programlama) arasındaki birleşim filtre Değiştir.

  5. Üzerinde yayımcı adresindeki yayın veritabanı, yürütmek sp_helpmergepublication (Transact-sql), değerini belirtme @ yayın adım 1.Not değeri snapshot_jobid , sonuç küme.

  6. Değeri dönüştürmek snapshot_jobid adım 5'te alınan uniqueidentifier.

  7. Üzerinde yayımcı adresindeki msdb veritabanı, yürütmek sp_start_job (Transact-SQL), adım 6 için elde dönüştürülmüş değerini belirtme @ job_id.

  8. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_addmergepartition (Transact-sql).İçin adım 1 yayından adını belirtmek @ yayın ve bölüm tanımlamak için kullanılan değer @ suser_sname , suser_sname (Transact-SQL) için veya filtre yan tümce tümce tümce kullanılır @ host_name , host_name (Transact-SQL) kullanılan filtre yan tümce tümce tümce.

  9. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_adddynamicsnapshot_job (Transact-sql).İçin adım 1 yayından adını belirtmek @ yayın, değerini @ suser_sname veya @ host_name 8 ve zamanlama iş için gelen adım.Bu iş için belirtilen bölüm parametreli anlık görüntü oluşturur işi oluşturur.Daha fazla bilgi için bkz: Nasıl yapılır: Eşitleme çizelgelerini (çoğaltma Transact-SQL programlama) belirtin.

    Not

    Bu iş adım 2'de tanımlanan ilk anlık görüntü iş olarak aynı Windows hesabını kullanarak çalışır.Parametreli anlık görüntü iş ve ilgili veri bölümünü kaldırmak için yürütmek sp_dropdynamicsnapshot_job (Transact-sql).

  10. Üzerinde yayımcı adresindeki yayın veritabanı, yürütmek sp_helpmergepartition (Transact-sql), değerini belirtme @ yayın adım 1 ve değerini @ suser_sname veya @ host_name dan 8 adım.Not değeri dynamic_snapshot_jobid , sonuç küme.

  11. Dağıtıcı üzerinde en msdb veritabanı, yürütmek sp_start_job (Transact-SQL), belirtme için 9 adımda elde edilen değer @ job_id.Parametreli anlık görüntü balar iş bölümü için.

  12. 8-11 Her abonelik için bölümlenmiş anlık görüntü oluşturmak için adımları yineleyin.

Bir yayın oluşturmak ve her bölüm için anlık görüntüleri el ile oluşturmak için

  1. Yürütme sp_addmergepublication (Transact-sql) oluşturmak yayın.Daha fazla bilgi için bkz: Nasıl yapılır: Bir yayını (çoğaltma Transact-SQL programlama) oluştur.

  2. Yayımcı tarafında yürütmek sp_addpublication_snapshot (Transact-sql).Belirtmek için 1. adımda kullanılan yayın adı @ yayın ve anlık görüntü Aracısı çalıştığı için Windows kimlik bilgileri bilgilerini @ job_login ve @ parola.Aracı kullanırsanız SQL Server Yayımcı bağlanırken kimlik doğrulama değeri de belirtmeniz gerekir 0 için @ publisher_security_mode ve SQL Server için oturum açma bilgilerini @ publisher_login ve publisher_password @.Bu bir anlık görüntü Aracısı iş yayın için oluşturur.Oluşturma hakkında daha fazla bilgi için bir ilk anlık görüntü ve Bkz: Anlık Görüntü Aracısı için özel bir zamanlama tanımlama, Nasıl yapılır: Başlangıç anlık görüntüsü (çoğaltma Transact-SQL programlama) oluştur.

    Güvenlik notuGüvenlik Notu

    Yayımcı ile yapılandırırken bir uzak Dağıtımcı, sağlanan da dahil olmak üzere tüm parametreler için değerler job_login ve job_password, için dağıtıcı düz metin olarak gönderilirBu saklı yordam yürütmeden önce Yayımcı ve kendi uzak dağıtımcı arasında bağlantı şifrelemek.Daha fazla bilgi için bkz: SQL Server bağlantıları şifreleme.

  3. Yürütme sp_addmergearticle (Transact-sql) yayın makaleleri eklemeBu saklı yordam her makale için bir kez yürütülmelidir yayın.Parametreli filtreleri kullanırken parametreli satır filtresi için en az bir makale kullanarak belirtmelisiniz @ subset_filterclause parametresi.Daha fazla bilgi için bkz: Nasıl yapılır: Tanımla ve birleştirme makalesi (çoğaltma Transact-SQL programlama) parametreli satır filtre Değiştir.

  4. Diğer makaleler parametreli satır filtresi göre filtre uygulanır, yürütmek sp_addmergefilter (Transact-sql) birleştirmek veya makaleleri arasında mantıksal kayıt ilişkileri tanımlamak içinBu saklı yordam için tanımlanan her ilişki bir kez çalıştırılması gerekir.Daha fazla bilgi için bkz: Nasıl yapılır: Tanımla ve birleştirme makaleleri (çoğaltma Transact-SQL programlama) arasındaki birleşim filtre Değiştir.

  5. Anlık görüntü Başlat iş veya anlık çoğaltma Anlık Görüntü Aracısı komut istemi isteminden çalıştırın standart oluşturmak için şema ve diğer dosyaların görüntüsünü.Daha fazla bilgi için bkz: Nasıl yapılır: Başlangıç anlık görüntüsü (çoğaltma Transact-SQL programlama) oluştur.

  6. Çoğaltma Anlık Görüntü Aracısı için bölümlenmiş anlık görüntü görüntü konumunu belirten toplu kopyalama (.bcp) dosyaları oluşturmak için komut istemi isteminden çalıştırmanız - dynamicsnapshotlocation ve aşağıdakilerden birini veya her ikisini bölüm tanımlar aşağıdaki özellikler:

  7. Her abonelik için bölümlenmiş anlık görüntü oluşturmak için 6. adımı yineleyin.

  8. Birleştirme aşağıdaki özellikleri belirleme abonelerin adresindeki ilk bölümlenmiş anlık görüntü görüntü uygulamak için Aracısı her abonelik için çalıştırın:

    • Hostname - -host_name gerçek değerini geçersiz kılınırsa bölüm tanımlamak için kullanılan değer.

    • DynamicSnapshotLocation - -Bu bölüm için dinamik anlık görüntü konumu.

Not

Çoğaltma aracıları programlama hakkında daha fazla bilgi için bkz: Çoğaltma aracısı Yürütülebilirler kavramları.

Örnek

Bu örnek birleştirme yayın ile parametreli süzgeçleri burada abonelerine anlık görüntü oluşturma işlemi başlatmak oluşturur.İçin değer @ job_login ve @ job_password komut dosyası kullanan kullanan kullanan dosyası değişkenleri kullanarak iletilir.

-- 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

Bu örnek yürüterek tanımlanan bölümünü her aboneye sahip olduğu parametreleştirilmiş bir filtre kullanarak bir yayın oluşturur sp_addmergepartition ve filtre uygulanmış anlık görüntü iş yürüterek oluşturulan sp_adddynamicsnapshot_iş bölümleme bilgilerini iletir.İçin değer @ job_login ve @ job_password komut dosyası kullanan kullanan kullanan dosyası değişkenleri kullanarak iletilir.

-- 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

Bu örnek, her abone kendi veri bölümü ve bölümleme bilgileri sağlayarak oluşturulan süzülmüş anlık görüntü iş yeri olmalıdır parametreleştirilmiş bir filtre kullanarak bir yayın oluşturur.Bir abonelik çoğaltma aracıları çalıştırırken komut satırı parametreleri kullanarak bölümleme bilgilerini sağlar.Bu örnek varsayar bir abonelik için yayın da oluşturuldu.

-- 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