Udostępnij za pośrednictwem


Jak Definiowanie artykuł (Programowanie replikacji Transact-SQL)

Po utworzeniu publikacja można tworzyć artykuły programowo za pomocą procedur przechowywanych replikacja.Procedury przechowywane, używany do tworzenia artykuł będzie zależeć od typu publikacja, dla której definiowane artykułu.Aby uzyskać więcej informacji, zobacz Jak Tworzenie publikacji (Programowanie replikacji Transact-SQL).

Ostrzeżenie

Artykuł nazwy nie mogą zawierać żadnego z następujących znaków: % , * , [ , ] , | , : , " , ?, ' , \ , / , < , >.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.

Aby zdefiniować artykuł migawki lub transakcyjnych publikacji

  1. Wydawca na baza danych publikacja, wykonanie sp_addarticle.Określ nazwę publikacja, do której artykuł należy do publikacja @, nazwę artykułu dla @ artykułu, publikowana dla obiektu bazy danych @ source_objecti inne parametry opcjonalne.Użyj @ source_owner do określenia schematu własność obiektu, jeśli nie dbo.Jeśli artykuł jest artykuł tabela na podstawie dziennika, określ typ artykułu dla typu @; Aby uzyskać więcej informacji, zobacz Jak Określ typy artykułów (Programowanie replikacji Transact-SQL).

  2. Poziomo filtrowanie wierszy w tabela lub wyświetlić artykuł, użyj sp_articlefilter do definiowania filtru klauzula.Aby uzyskać więcej informacji, zobacz Jak Definiowanie i modyfikowanie filtru wiersz statycznego (Programowanie replikacji Transact-SQL).

  3. Pionowo filtrować kolumny w tabela lub wyświetlić artykuł, użyj sp_articlecolumn.Aby uzyskać więcej informacji, zobacz Jak Definiowanie i modyfikowanie filtru kolumny (Programowanie replikacji Transact-SQL).

  4. Wykonanie sp_articleview Jeśli filtrowane artykuł.

  5. Jeśli publikacja ma istniejących subskrypcja i sp_helppublication zwraca wartość 0 w immediate_sync kolumna, należy wywołać sp_addsubscription dodać artykuł do każdej istniejącej subskrypcja.

  6. Jeśli publikacja ma istniejących subskrypcji ściągania, wykonać sp_refreshsubscriptions przez wydawcę, aby utworzyć nową migawka dla istniejących subskrypcji ściąganej, które zawiera nowy artykuł.

    Ostrzeżenie

    Subskrypcji, które nie są inicjowane przy użyciu migawka, nie trzeba wykonać sp_refreshsubscriptions , procedura ta jest wykonaćd przez sp_addarticle.

Aby zdefiniować artykuł dla publikacji korespondencji seryjnej

  1. Wydawca na baza danych publikacja, wykonanie sp_addmergearticle.Określ nazwę publikacja dla publikacja @, nazwę nazwę artykuł @ artykułi publikowania dla obiektu @ source_object.Poziomo filtrowanie wierszy tabela, należy określić wartość dla @ subset_filterclause.Aby uzyskać więcej informacji, zobacz Jak Definiowanie i modyfikowanie filtru sparametryzowana wiersz artykuł korespondencji seryjnej (Programowanie replikacji Transact-SQL) i Jak Definiowanie i modyfikowanie filtru wiersz statycznego (Programowanie replikacji Transact-SQL).Jeśli artykuł jest artykuł tabela, określ typ artykułu dla typu @.Aby uzyskać więcej informacji, zobacz Jak Określ typy artykułów (Programowanie replikacji Transact-SQL).

  2. (Opcjonalnie) Wydawca na baza danych publikacja, wykonanie sp_addmergefilter do definiowania filtru łączyć między dwoma artykułów.Aby uzyskać więcej informacji, zobacz Jak Definiowanie i modyfikowanie filtru sprzężenia między artykuły korespondencji seryjnej (Programowanie replikacji Transact-SQL).

  3. (Opcjonalnie) Wydawca na baza danych publikacja, wykonanie sp_mergearticlecolumn do kolumny tabela filtrów.Aby uzyskać więcej informacji, zobacz Jak Definiowanie i modyfikowanie filtru kolumny (Programowanie replikacji Transact-SQL).

Przykład

W tym przykładzie określa się na podstawie artykuł produktu tabela dla transakcyjnych publikacja, gdzie artykuł jest filtrowana w poziomie i w pionie.

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

W tym przykładzie definiuje artykuły do publikacja korespondencji seryjnej, gdzie SalesOrderHeader statycznie jest filtrowane na podstawie artykułu SalesPersonIDoraz SalesOrderDetail artykuł jest filtrowane łączyć na podstawie 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