Aracılığıyla paylaş


Nasıl yapılır: Tanımla ve birleştirme makalesi (çoğaltma Transact-SQL programlama) parametreli satır filtre Değiştir

Tablo makaleleri oluşturulurken parametreli satır filtreleri kullanabilirsiniz.Bu filtreler kullanmak bir burada yayımlanmak üzere uygun verileri seçmek için yan tümce tümce tümce.(statik satır filtresi ile olduğu gibi) bir hazýr bilgi deðeri yan tümce tümce tümcesinde belirtme yerine, aşağıdakilerden birini veya her ikisini aşağıdaki sistem işlevleri belirtin: suser_sname ve host_name.Daha fazla bilgi için bkz: Satır filtreleri parametreli.Parametreli satır filtre oluşturulabilir ve çoğaltma depolanmış yordamları kullanarak programsal yoldan değiştirilebilir.

İçinde bir birleştirme yayın bir makale için parametreli satır filtresi tanımlamak için

  • yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_addmergearticle (Transact-sql).Belirtmek @ yayın, makale için bir ad @ makale, tablo için yayınlanmış @ source_object, tanımlar parametreli filtre için where yan tümce tümce tümce @ subset_filterclause (değil de dahil olmak üzere WHERE), ve aşağıdaki değerleri için @ partition_options, parametreli satır filtresi sonuçlanacak bölümleme türünü açıklar:

    • 0 - Statik veya veri her bölüm için benzersiz alt küme küme küme verim makale için süzme (bir "örtüşen" Bölüm).

    • 1 - Sonuç bölümleri örtüşen ve Abone tarafında yapılan güncelleştirmeleri bir satırın ait olduğu bölümü değiştirin.

    • 2 - Makale için süzme örtüşmeyen bölümleri verir, ancak birden çok aboneleri aynı bölüm alabilir.

    • 3 - Her abonelik için benzersiz olan makale sayıları örtüşmeyen bölümleri için filtreleme.

Değiştirmek için bir parametreli satır filtresi de bir birleştirme yayın bir makale için

  1. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_changemergearticle.Belirtmek @ yayın, @ makale, değeri subset_filterclause için @ özellik, tanımlar parametreli filtre için ifade @ değeri (değil de dahil olmak üzere WHERE) ve değeri 1 her ikisi için de @ force_invalidate_snapshot ve @ force_reinit_subscription.

  2. Durumunda bu değişiklik sonuçlar farklı bölümleme davranışı, daha sonra yürütmek sp_changemergearticle yeniden.Belirtmek @ yayın, @ makale, değeri partition_options için @ özellikve en uygun bölümleme seçenek için @ değeri, hangi olabilir aşağıdakilerden biri:

    • 0 - Statik veya veri her bölüm için benzersiz alt küme küme küme verim makale için süzme (bir "örtüşen" Bölüm).

    • 1 - Sonuç bölümleri örtüşen ve Abone tarafında yapılan güncelleştirmeleri bir satırın ait olduğu bölümü değiştirin.

    • 2 - Makale için süzme örtüşmeyen bölümleri verir, ancak birden çok aboneleri aynı bölüm alabilir.

    • 3 - Her abonelik için benzersiz olan makale sayıları örtüşmeyen bölümleri için filtreleme.

Örnek

Bu örnek nerede makaleleri filtre bir dizi karşı birleştirmek filtreleri ile birleştirmek yayın makaleleri grubu tanımlayan Personel tablo yani kendisini parametreli satır filtresi kullanarak filtre uygulanmış LoginID sütun.Eşitleme sırasında tarafından döndürülen değer host_name işlev Geçersiz Kılınıyor.Geçersiz kılma host_name() değeri konusunda daha fazla bilgi için bkz: Parametreli satır filtreleri.

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