Aracılığıyla paylaş


Nasıl yapılır: Tanımla ve statik satır filtresi (çoğaltma Transact-SQL programlama) değiştirme

Tablo makaleler oluştururken filtre satırları bir makale için bir where yan tümce tümce tümce tanımlayabilirsiniz.Onu tanımlandıktan sonra bir satır filtresini değiştirebilirsiniz.Statik satır filtre oluşturulabilir ve çoğaltma depolanmış yordamları kullanarak programsal yoldan değiştirilebilir.Bu filtreler statik olduğundan, tüm abonelerin aynı verilerin alt küme küme kümesini alır.Dinamik olarak bir birleştirme yayın için bu nedenle ait bir tablo makale satırları süzmek gerekirse her abone farklı bir bölüm veri alır Bkz: Nasıl yapılır: Tanımla ve birleştirme makalesi (çoğaltma Transact-SQL programlama) parametreli satır filtre Değiştir.Birleştirme çoğaltma de, varolan satır filtreyi temel ilgili satırları süzmek sağlar.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.

Bir anlık görüntü veya işlem statik satır filtresi tanımlamak içinyayın

  1. Tanımla makale filtre uygulamak için.Daha fazla bilgi için bkz: Nasıl yapılır: Bir makalesi (çoğaltma Transact-SQL programlama) tanımla.

  2. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_articlefilter (Transact-sql).İçin makalenin adını belirtmek @ makale, yayını adını @ yayın, için filtre için bir ad @ filtre_adıve filtre yan tümce tümce tümce için @ filter_clause (değil dahil olmak üzere WHERE).

  3. sütun filtresi hala tanımlanması gerekir, bkz: Nasıl yapılır: Tanımla ve sütun filtresi (çoğaltma Transact-SQL programlama) değiştirme.Aksi takdirde, yürütmek sp_articleview (Transact-sql).Yayını adını belirtin @ yayın, filtre uygulanmış bir makale için adını @ makaleve için adım 2'de belirtilen filtre yan tümce tümce tümce @ filter_clause.Bu makale filtre uygulanmış eşitleme nesneleri oluşturur.

Değiştirmek için bir statik satır filtresi bir anlık görüntü ya da işlemsel yayım

  1. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_articlefilter (Transact-sql).İçin makalenin adını belirtmek @ makale, yayını adını @ yayın, yeni filtre için bir ad @ filtre_adıve yeni bir filtre yan tümce tümce tümce için @ filter_clause (değil de dahil olmak üzere WHERE).Bu değişiklik, verileri varolan abonelikleri kılacak çünkü değerini belirtin 1 için @ force_reinit_subscription.

  2. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_articleview (Transact-sql).Yayını adını belirtin @ yayın, filtre uygulanmış bir makale için adını @ makaleve için adım 1'de belirtilen filtre yan tümce tümce tümce @ filter_clause.Bu filtre uygulanmış makale tanımlar görünümü yeniden oluşturur.

  3. Güncelleştirilmiş bir anlık görüntüsünü oluşturmak için yayın için Anlık Görüntü Aracısı iş yeniden çalıştırı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.

  4. Abonelikleri yeniden başlatmak.Daha fazla bilgi için bkz: Nasıl yapılır: Yeniden abonelik (çoğaltma Transact-SQL programlama).

Silmek için bir statik satır filtresi bir anlık görüntü ya da işlemsel yayım

  1. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_articlefilter (Transact-sql).İçin makalenin adını belirtmek @ makale, yayını adını @ yayın, için null değerini @ filtre_adıve değeri için null @ filter_clause.Bu değişiklik, verileri varolan abonelikleri kılacak çünkü değerini belirtin 1 için @ force_reinit_subscription.

  2. Güncelleştirilmiş bir anlık görüntüsünü oluşturmak için yayın için Anlık Görüntü Aracısı iş yeniden çalıştırı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.

  3. Abonelikleri yeniden başlatmak.Daha fazla bilgi için bkz: Nasıl yapılır: Yeniden abonelik (çoğaltma Transact-SQL programlama).

Bir birleştirme yayın için statik satır filtresi tanımlamak için

  1. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_addmergearticle (Transact-sql).Filtre yan tümce tümce tümce için belirtmek @ subset_filterclause (değil dahil olmak üzere WHERE).Daha fazla bilgi için bkz: Nasıl yapılır: Bir makalesi (çoğaltma Transact-SQL programlama) tanımla.

  2. sütun filtresi hala tanımlanması gerekir, bkz: Nasıl yapılır: Tanımla ve sütun filtresi (çoğaltma Transact-SQL programlama) değiştirme.

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

  1. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_changemergearticle (Transact-sql).Yayını adını belirtin @ yayın, filtre uygulanmış bir makale için adını @ makale, değeri subset_filterclause için @ özellikve yeni bir filtre yan tümce tümce tümce için @ değeri (değil de dahil olmak üzere WHERE).Bu değişiklik, verileri varolan abonelikleri kılacak çünkü için 1 değerini belirtin @ force_reinit_subscription.

  2. Güncelleştirilmiş bir anlık görüntüsünü oluşturmak için yayın için Anlık Görüntü Aracısı iş yeniden çalıştırı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.

  3. Abonelikleri yeniden başlatmak.Daha fazla bilgi için bkz: Nasıl yapılır: Yeniden abonelik (çoğaltma Transact-SQL programlama).

Örnek

Bu işlem çoğaltma örnek olarak makale tüm discontinued ürün kaldırmak için yatay olarak filtre uygulanır.

DECLARE @publication    AS sysname;
DECLARE @table AS sysname;
DECLARE @filterclause AS nvarchar(500);
DECLARE @filtername AS nvarchar(386);
DECLARE @schemaowner AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @table = N'Product';
SET @filterclause = N'[DiscontinuedDate] IS NULL'; 
SET @filtername = N'filter_out_discontinued';
SET @schemaowner = N'Production';

-- Add a horizontally and vertically filtered article for the Product table.
-- Manually set @schema_option to ensure that the Production schema 
-- is generated at the Subscriber (0x8000000).
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @table, 
    @source_object = @table,
    @source_owner = @schemaowner, 
    @schema_option = 0x80030F3,
    @vertical_partition = N'true', 
    @type = N'logbased',
    @filter_clause = @filterclause;

-- (Optional) Manually call the stored procedure to create the 
-- horizontal filtering stored procedure. Since the type is 
-- 'logbased', this stored procedures is executed automatically.
EXEC sp_articlefilter 
    @publication = @publication, 
    @article = @table, 
    @filter_clause = @filterclause, 
    @filter_name = @filtername;

-- Add all columns to the article.
EXEC sp_articlecolumn 
    @publication = @publication, 
    @article = @table;

-- Remove the DaysToManufacture column from the article
EXEC sp_articlecolumn 
    @publication = @publication, 
    @article = @table, 
    @column = N'DaysToManufacture', 
    @operation = N'drop';

-- (Optional) Manually call the stored procedure to create the 
-- vertical filtering view. Since the type is 'logbased', 
-- this stored procedures is executed automatically.
EXEC sp_articleview 
    @publication = @publication, 
    @article = @table,
    @filter_clause = @filterclause;
GO

Bu mektup birleştirme işleminde çoğaltma Örneğin, yalnızca belirli bir satışçıya ait satırları döndürmek için makaleleri yatay olarak filtrelenir.A birleştirmek filtresi de kullanılır.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.

DECLARE @publication AS sysname;
DECLARE @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @table3 AS sysname;
DECLARE @salesschema AS sysname;
DECLARE @hrschema AS sysname;
DECLARE @filterclause AS nvarchar(1000);
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @table1 = N'Employee'; 
SET @table2 = N'SalesOrderHeader'; 
SET @table3 = N'SalesOrderDetail'; 
SET @salesschema = N'Sales';
SET @hrschema = N'HumanResources';
SET @filterclause = N'Employee.LoginID = HOST_NAME()';

-- Add a filtered article for the Employee table.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table1, 
  @source_object = @table1, 
  @type = N'table', 
  @source_owner = @hrschema,
  @schema_option = 0x0004CF1,
  @description = N'article for the Employee table',
  @subset_filterclause = @filterclause;

-- Add an article for the SalesOrderHeader table that is filtered
-- based on Employee and horizontally filtered.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table2, 
  @source_object = @table2, 
  @type = N'table', 
  @source_owner = @salesschema, 
  @vertical_partition = N'true',
  @schema_option = 0x0034EF1,
  @description = N'article for the SalesOrderDetail table';

-- Add an article for the SalesOrderDetail table that is filtered
-- based on SaledOrderHeader.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table3, 
  @source_object = @table3, 
  @source_owner = @salesschema,
  @description = 'article for the SalesOrderHeader table', 
  @identityrangemanagementoption = N'auto', 
  @pub_identity_range = 100000, 
  @identity_range = 100, 
  @threshold = 80,
  @schema_option = 0x0004EF1;

-- Add all columns to the SalesOrderHeader article.
EXEC sp_mergearticlecolumn 
  @publication = @publication, 
  @article = @table2, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Remove the credit card Approval Code column.
EXEC sp_mergearticlecolumn 
  @publication = @publication, 
  @article = @table2, 
  @column = N'CreditCardApprovalCode', 
  @operation = N'drop', 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Add a merge join filter between Employee and SalesOrderHeader.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table2, 
  @filtername = N'SalesOrderHeader_Employee', 
  @join_articlename = @table1, 
  @join_filterclause = N'Employee.BusinessEntityID = SalesOrderHeader.SalesPersonID', 
  @join_unique_key = 1, 
  @filter_type = 1, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Add a merge join filter between SalesOrderHeader and SalesOrderDetail.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table3, 
  @filtername = N'SalesOrderDetail_SalesOrderHeader', 
  @join_articlename = @table2, 
  @join_filterclause = N'SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID', 
  @join_unique_key = 1, 
  @filter_type = 1, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;
GO