Definir e modificar um filtro de colunas

Aplica-se a: Instância Gerenciada de SQL do Azure SQL Server (todas as versões com suporte)

Este tópico descreve como definir e modificar um filtro de coluna em SQL Server usando SQL Server Management Studio ou Transact-SQL.

Neste tópico

Antes de começar

Limitações e Restrições

  • Algumas colunas não podem ser filtradas; para obter mais informações, consulte Filtrar dados publicados. Se você modificar um filtro de coluna depois que as assinaturas forem inicializadas, será preciso gerar um novo instantâneo e reinicializar todas as assinaturas depois de fazer a alteração. Para obter mais informações sobre os requisitos para alterações de propriedades, consulte Alterar propriedades da publicação e do artigo.

Como usar o SQL Server Management Studio.

Defina filtros de coluna na página Artigos do Assistente para Nova Publicação. Para obter mais informações sobre como usar o Assistente para Nova Publicação, consulte Criar uma publicação.

Defina e modifique filtros de coluna na página Artigos da caixa de diálogo Propriedades da Publicação – <Publicação> . Para obter mais informações sobre propriedades de publicação e de artigo, consulte View and Modify Publication Properties (Exibir e modificar propriedades de publicação).

Para definir um filtro de coluna

  1. Na página Artigos do Assistente para Nova Publicação, expanda a tabela a ser filtrada no painel Objetos para publicação .

  2. Desmarque a caixa de seleção próxima a cada coluna que você quer filtrar.

Para modificar a filtragem de coluna

  1. Na página Artigos da caixa de diálogo Propriedades da Publicação – <Publicação> , expanda a tabela a ser filtrada no painel Objetos a serem publicados .

  2. Desmarque a caixa de seleção próxima a cada coluna que você deseja filtrar e certifique-se de que a caixa de seleção esteja marcada para cada coluna que deve ser incluída no artigo.

  3. Selecione OK.

Usando o Transact-SQL

Quando for criar artigos de tabela, você pode definir as colunas para serem incluídas no artigo e alterar as colunas após o artigo ter sido definido. Colunas filtradas podem ser criadas e modificadas de forma programada usando os procedimentos de replicação armazenados.

Observação

Os procedimentos a seguir assumem que a tabela subjacente não tenha sido alterada. Para obter informações sobre como replicar DDL (linguagem de definição de dados) para tabelas publicadas, consulte Fazer alterações de esquema em bancos de dados de publicação.

Para definir um filtro de coluna para um artigo publicado em um instantâneo ou publicação transacional

  1. Defina o artigo a ser filtrado. Para obter mais informações, consulte Define an Article.

  2. No Publicador do banco de dados de publicação, execute sp_articlecolumn. Isto define as colunas a serem incluídas ou removidas do artigo.

    • Se publicar apenas algumas colunas de uma tabela com várias colunas, execute sp_articlecolumn uma vez para cada coluna sendo adicionada. Especifique o nome da coluna para @column e um valor de adição para @operation.

    • Se estiver publicando a maioria das colunas em uma tabela com muitas colunas, execute sp_articlecolumn, especificando um valor nulo para @column e um valor de adição para @operation para adicionar todas as colunas. Em seguida, execute sp_articlecolumn, uma vez para cada coluna que está sendo excluída, especificando um valor de queda para @operation e o nome da coluna excluída para @column.

  3. No Publicador do banco de dados de publicação, execute sp_articleview. Especifique o nome da publicação para @publication e o nome do artigo filtrado para @article. Isto cria os objetos de sincronização para o artigo filtrado.

Para alterar um filtro de coluna para incluir colunas adicionais no artigo publicado em um instantâneo ou em uma publicação transacional

  1. No Publicador do banco de dados de publicação, execute sp_articlecolumn uma vez para cada coluna sendo adicionada. Especifique o nome da coluna para @column e um valor de adição para @operation.

  2. No Publicador do banco de dados de publicação, execute sp_articleview. Especifique o nome da publicação para @publication e o nome do artigo filtrado para @article. Se a publicação tiver assinaturas existentes, especifique um valor de 1 para @change_active. Isto cria novamente os objetos de sincronização para o artigo filtrado.

  3. Execute novamente o Snapshot Agent da publicação para gerar um instantâneo atualizado.

  4. Reinicialize as assinaturas. Para obter mais informações, consulte Reinicializar as assinaturas.

Para alterar um filtro de coluna para remover colunas de um artigo publicado em um instantâneo ou em uma publicação transacional

  1. No Publicador do banco de dados de publicação, execute sp_articlecolumn uma vez para cada coluna sendo removida. Especifique o nome da coluna para @column e um valor de queda para @operation.

  2. No Publicador do banco de dados de publicação, execute sp_articleview. Especifique o nome da publicação para @publication e o nome do artigo filtrado para @article. Se a publicação tiver assinaturas existentes, especifique um valor de 1 para @change_active. Isto cria novamente os objetos de sincronização para o artigo filtrado.

  3. Execute novamente o Snapshot Agent da publicação para gerar um instantâneo atualizado.

  4. Reinicialize as assinaturas. Para obter mais informações, consulte Reinicializar as assinaturas.

Para definir um filtro de coluna para um artigo publicado em uma publicação de mesclagem

  1. Defina o artigo a ser filtrado. Para obter mais informações, consulte Define an Article.

  2. No Publicador do banco de dados de publicação, execute sp_mergearticlecolumn. Isto define as colunas a serem incluídas ou removidas do artigo.

    • Se publicar apenas algumas colunas de uma tabela com várias colunas, execute sp_mergearticlecolumn uma vez para cada coluna sendo adicionada. Especifique o nome da coluna para @column e um valor de adição para @operation.

    • Se estiver publicando a maioria das colunas em uma tabela com muitas colunas, execute sp_mergearticlecolumn, especificando um valor nulo para @column e um valor de adição para @operation para adicionar todas as colunas. Em seguida, execute sp_mergearticlecolumn, uma vez para cada coluna que está sendo excluída, especificando um valor de queda para @operation e o nome da coluna excluída para @column.

Para alterar um filtro de coluna para incluir colunas adicionais no artigo publicado em uma publicação de mesclagem

  1. No Publicador do banco de dados de publicação, execute sp_mergearticlecolumn uma vez para cada coluna sendo adicionada. Especifique o nome da coluna para @column, um valor de adição para @operation e um valor de 1 para @force_invalidate_snapshot e @force_reinit_subscription.

  2. Execute novamente o Snapshot Agent da publicação para gerar um instantâneo atualizado.

  3. Reinicialize as assinaturas. Para obter mais informações, consulte Reinicializar as assinaturas.

Para alterar um filtro de coluna para remover colunas de um artigo publicado em uma publicação de mesclagem

  1. No Publicador do banco de dados de publicação, execute sp_mergearticlecolumn uma vez para cada coluna sendo removida. Especifique o nome da coluna para @column, um valor de queda para @operation e um valor de 1 para @force_invalidate_snapshot e @force_reinit_subscription.

  2. Execute novamente o Snapshot Agent da publicação para gerar um instantâneo atualizado.

  3. Reinicialize as assinaturas. Para obter mais informações, consulte Reinicializar as assinaturas.

Exemplo (Transact-SQL)

Nesse exemplo de replicação transacional, a coluna DaysToManufacture é removida de um artigo com base na tabela Product .

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

Nesse exemplo de replicação de mesclagem, a coluna CreditCardApprovalCode é removida de um artigo com base na tabela 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

Consulte Também

Alterar propriedades da publicação e do artigo
Filtrar os dados publicados
Filtrar dados publicados para a replicação de mesclagem