Aracılığıyla paylaş


Nasıl yapılır: Bir makalesi (çoğaltma Transact-SQL programlama) tanımla

Bir yayın oluşturduktan sonra makaleleri programlı olarak çoğaltma depolanmış yordamları kullanarak oluşturulabilir.Bir makale oluşturmak için kullanılan saklı yordamlar makale tanımlanmakta olan yayın türüne bağlıdır.Daha fazla bilgi için bkz: Nasıl yapılır: Bir yayını (çoğaltma Transact-SQL programlama) oluştur.

Not

Makale adı şu karakterlerden herhangi birini içeremez: % , * , [ , ] , | , : , " , ?, ' , \ , / , < , >.If objects in the database include any of these characters and you want to replicate them, you must specify an article name that is different from the object name.

Bir makale anlık görüntü ya da işlemsel yayım için tanımlamak için

  1. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_addarticle.Makale olduğu için yayın adı belirtmek @ yayın, makale için bir ad @ makale, için yayımlanmış veritabanı nesnesi @ source_objectve diğer tüm isteğe bağlı parametreleri.Use @ source_owner değilse, nesnenin şema sahipliğini belirlemek için dbo.Makale tablo günlük tabanlı makale ise, makale türünü belirtmek @ türü; daha fazla bilgi için bkz: Nasıl yapılır: Makalesi (çoğaltma Transact-SQL programlama) belirtin.

  2. Yatay olarak bir tablo veya görünümde satırları süzmek için bir makale, kullanma sp_whomakalefiltre filtre yan tümce tümce tümce tanımlamak için.Daha fazla bilgi için bkz: Nasıl yapılır: Tanımla ve statik satır filtresi (çoğaltma Transact-SQL programlama) değiştirme.

  3. Dikey olarak bir tablo veya görünümde sütunları süzmek için bir makale, kullanma sp_whomakalesütun.Daha fazla bilgi için bkz: Nasıl yapılır: Tanımla ve sütun filtresi (çoğaltma Transact-SQL programlama) değiştirme.

  4. Yürütme sp_whomakaleview , makale süzülür.

  5. yayın Varolan abonelikleri varsa ve sp_helpyayın değerini döndürür 0 de immediate_sync sütununda çağırmanız gerekir sp_addsubscription için varolan her abonelik makaleyi eklemek için.

  6. yayın Varolan çekme abonelikleri yürütme olan sp_refreshsubscriptions yeni makaleyi içeren yeni bir anlık görüntü için varolan çekme abonelikleri oluşturmak için yayımcı adresindeki.

    Not

    anlık görüntü kullanarak başlatılır değil abonelikleri yürütmek gerekmez sp_refreshsubscriptions Bu yordam tarafından yürütülür gibi sp_addarticle.

Bir makale için birleştirme yayını tanımlamak için

  1. yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_addmergearticle.Yayını adını belirtmek @ yayın, makalenin adı için bir ad @ makaleve nesne için yayınlanmış @ source_object.Tablo satırları yatay olarak filtre uygulamak için bir değer belirtmek @ subset_filterclause.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 ve Nasıl yapılır: Tanımla ve statik satır filtresi (çoğaltma Transact-SQL programlama) değiştirme.Makale tablo makale ise, makale türünü belirtmek @ türü.Daha fazla bilgi için bkz: Nasıl yapılır: Makalesi (çoğaltma Transact-SQL programlama) belirtin.

  2. (İsteğe bağlı) yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_addmergefilter tanımlamak için bir birleşim filtresi iki makaleleri arasında.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.

  3. (İsteğe bağlı) yayın veritabanı üzerinde Yayımcı tarafında yürütmek sp_mergearticlecolumn filtre tablo sütunları için.Daha fazla bilgi için bkz: Nasıl yapılır: Tanımla ve sütun filtresi (çoğaltma Transact-SQL programlama) değiştirme.

Örnek

Bu örnekte temel alan bir makale tanımlar Ürün tablo bir işlem için yayın, hem yatay hem de dikey olarak makaleyi burada süzülü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 örnek, birleştirmek yayın makaleleri tanımlar nerede SalesOrderHeader makalede statik filtre dayalı olarak SalesPersonIDve SalesOrderDetail makale birleştirmek filtre, temel SalesOrderHeader.

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