Share via


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

Tablo makaleleri oluşturulurken makaleye dahil ve makale tanımlandıktan sonra sütunları değiştirmek için hangi sütunların tanımlayabilirsiniz.Oluşturmak ve çoğaltma depolanmış yordamları kullanarak programsal süzülmüş sütunları değiştirmek.Sütunlar, bazı türleri gibi kimlik ve ROWGUID sütunları olamaz kaldırıldı tarafından yayımlanan bir makale.Daha fazla bilgi için Column Filters konusuna bakın Veri süzme yayımlandı.

Not

Aşağıdaki yordamlarda, temel alınan temel alınan tablo değişmiş olduğu varsayılmıştır.Çoğaltma hakkında bilgi için veri tanımlama dili (ddl) değişiklikler için yayımlanmış tabloları Bkz: Yayını veritabanları üzerinde şeması değişiklikler yapma.

İçin sütun filtresi tanımlamak için bir makale bir anlık görüntü veya işlem yayın yayımlanmış

  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_articlecolumn.Sütun eklemek veya kaldırmak için bu tanımlar makale.

    • Yalnızca birkaç sütun yayımlama, bir tablo fazla sütun ile yürütme sp_articlecolumn eklenen her sütun için bir kez.Sütun adını belirtin @ sütun değeri ekleme için @ işlemi.

    • Sütunlarında çoğu yayımlama, bir tablo fazla sütun ile yürütmek sp_articlecolumn, değeri belirterek null için @ sütun değeri ekleme için @ işlem tüm sütunları eklemek için.Daha sonra yürütmek sp_articlecolumn, dışarıda her sütun için değeri belirten bir kez bırak için @ işlem ve dışlanan sütun adı için @ sütun.

  3. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_articleview.Yayını adını belirtin @ yayın ve filtre uygulanmış bir makale için adını @ makale.Bu makale filtre uygulanmış eşitleme nesneleri oluşturur.

Bir anlık görüntü veya işlem yayın yayımlanmış bir makale için ek sütunlar eklemek için sütun filtresi değiştirmek için

  1. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_articlecolumn eklenen her sütun için bir kez.Sütun adını belirtin @ sütun değeri ekleme için @ işlemi.

  2. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_articleview.Yayını adını belirtin @ yayın ve filtre uygulanmış bir makale için adını @ makale.yayın Değerini belirtin varolan abonelikleri varsa 1 için @ change_active.Bu makale filtre uygulanmış eşitleme nesneleri 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.

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

Sütun kaldırmak için sütun filtresi değiştirmek için bir makale bir anlık görüntü veya işlem yayın yayımlanmış

  1. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_articlecolumn kaldırılmakta her sütun için bir kez.Sütun adını belirtin @ sütun değeri bırak için @ işlemi.

  2. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_articleview.Yayını adını belirtin @ yayın ve filtre uygulanmış bir makale için adını @ makale.yayın Değerini belirtin varolan abonelikleri varsa 1 için @ change_active.Bu makale filtre uygulanmış eşitleme nesneleri 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.

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

İçin sütun filtresi tanımlamak için bir makale bir birleştirme yayın yayımlanmış

  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_mergearticlecolumn.Sütun eklemek veya kaldırmak için bu tanımlar makale.

    • Yalnızca birkaç sütun yayımlama, bir tablo fazla sütun ile yürütme sp_mergearticlecolumn eklenen her sütun için bir kez.Sütun adını belirtin @ sütun değeri ekleme için @ işlemi.

    • Sütunlarında çoğu yayımlama, bir tablo fazla sütun ile yürütmek sp_mergearticlecolumn, değeri belirterek null için @ sütun değeri ekleme için @ işlem tüm sütunları eklemek için.Daha sonra yürütmek sp_mergearticlecolumn, dışarıda her sütun için değeri belirten bir kez bırak için @ işlem ve dışlanan sütun adı için @ sütun.

Yayımlanan bir birleştirme yayın bir makale için ek sütunlar eklemek için sütun filtresi değiştirmek için

  1. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_mergearticlecolumn eklenen her sütun için bir kez.Sütun adını belirtin @ sütun, değeri ekleme için @ işlem değeri 1 her ikisi için de @ force_invalidate_snapshot ve @ 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.

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

Sütun kaldırmak için sütun filtresi değiştirmek için bir makale bir birleştirme yayın yayımlanmış

  1. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_mergearticlecolumn kaldırılmakta her sütun için bir kez.Sütun adını belirtin @ sütun, değeri bırak için @ işlem değeri 1 her ikisi için de @ force_invalidate_snapshot ve @ 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.

  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 DaysToManufacture sütunu temel alan bir makale kaldırılmıştır Ürün tablo.

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 birleştirme çoğaltma örnek olarak CreditCardApprovalCode sütunu temel alan bir makale kaldırılmıştır SalesOrderHeader tablo.

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