sp_addmergefilter (Transact-SQL)

Aplica-se a: simSQL Server (todas as versões compatíveis) SimInstância Gerenciada do Azure SQL

Adiciona um novo filtro de mesclagem para criar uma partição com base em uma junção com outra tabela. Esse procedimento armazenado é executado no Publicador, no banco de dados publicador.

Ícone de link do tópico Convenções da sintaxe Transact-SQL

Sintaxe

  
sp_addmergefilter [ @publication = ] 'publication'   
        , [ @article = ] 'article'   
        , [ @filtername = ] 'filtername'   
        , [ @join_articlename = ] 'join_articlename'   
        , [ @join_filterclause = ] join_filterclause  
    [ , [ @join_unique_key = ] join_unique_key ]  
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]  
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]  
    [ , [ @filter_type = ] filter_type ]  

Argumentos

[ @publication = ] 'publication' É o nome da publicação na qual o filtro de mesclagem está sendo adicionado. publication é sysname, sem padrão.

[ @article = ] 'article' É o nome do artigo no qual o filtro de mesclagem está sendo adicionado. article é sysname, sem padrão.

[ @filtername = ] 'filtername' É o nome do filtro. filtername é um parâmetro obrigatório. filtername é sysname, sem padrão.

[ @join_articlename = ] 'join_articlename' É o artigo pai ao qual o artigo filho, especificado pelo artigo , deve ser unido usando a cláusula de junção especificada por join_filterclause , para determinar as linhas no artigo filho que atendem ao critério de filtro do filtro de mesclagem. join_articlename é sysname, sem padrão. O artigo deve estar na publicação determinada pela publicação.

[ @join_filterclause = ] join_filterclauseÉ a cláusula de junção que deve ser usada para unir o artigo filho especificado pelo artigo e artigo pai especificado por join_article , para determinar as linhas que qualificam o filtro de mesclagem. join_filterclause é nvarchar(1000).

[ @join_unique_key = ] join_unique_keyEspecifica se a junção entre o artigo filho e o artigo pai join_article é um-para-muitos, um-para-um, muitos para um ou muitos para muitos. join_unique_key é int, com um padrão de 0. 0 indica uma junção muitos para um ou muitos para muitos. 1 indica uma junção um-para-um ou um-para-muitos. Esse valor é 1 quando as colunas de junção formam uma chave exclusiva no join_article ou se join_filterclause está entre uma chave estrangeira no artigo e uma chave primária no join_article .

Cuidado

De definir esse parâmetro como 1 somente se você tiver uma restrição na coluna de junção na tabela subjacente para o artigo pai que garante a exclusividade. Se join_unique_key for definido como 1 incorretamente, poderá ocorrer não convergência de dados.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot Reconhece que a ação tomada por esse procedimento armazenado pode invalidar um instantâneo existente. force_invalidate_snapshot é um pouco, com um padrão 0.

0 especifica que as alterações no artigo de mesclagem não causarão a invalidez do instantâneo. Se o procedimento armazenado detectar que a alteração requer um novo instantâneo, ocorrerá um erro e nenhuma alteração será feita.

1 especifica que as alterações no artigo de mesclagem podem fazer com que o instantâneo seja inválido e, se houver assinaturas existentes que exigiriam um novo instantâneo, concede permissão para que o instantâneo existente seja marcado como obsoleto e um novo instantâneo seja gerado.

[ @force_reinit_subscription = ] force_reinit_subscription Reconhece que a ação tomada por esse procedimento armazenado pode exigir que as assinaturas existentes sejam reinicializadas. force_reinit_subscription é um pouco, com um padrão de 0.

0 especifica que as alterações no artigo de mesclagem não fará com que a assinatura seja reinicializada. Se o procedimento armazenado detectar que a alteração irá requerer que as assinaturas existentes sejam reiniciadas, ocorrerá um erro e nenhuma alteração será feita.

1 especifica que as alterações no artigo de mesclagem fará com que as assinaturas existentes sejam reinicializadas e concede permissão para que a reinicialização da assinatura ocorra.

[ @filter_type = ] filter_type Especifica o tipo de filtro que está sendo adicionado. filter_type é tinyint e pode ser um dos valores a seguir.

Valor Descrição
1 Somente filtro de junção. Necessário para dar suporte a SQL Server Compact Assinantes.
2 Somente relação de registro lógico.
3 Relação de filtro de junção e registro lógico.

Para obter mais informações, consulte Agrupar alterações a linhas relacionadas com registros lógicos.

Valores do código de retorno

0 (êxito) ou 1 (falha)

Comentários

sp_addmergefilter é usado na replicação de mesclagem.

sp_addmergefilter pode ser usado apenas com artigos de tabela. Artigos de exibição e exibição indexada não têm suporte.

Esse procedimento também pode ser usado para adicionar uma relação lógica entre dois artigos que podem ou não ter um filtro de junção entre eles. filter_type é usado para especificar se o filtro de mesclagem que está sendo adicionado é um filtro de junção, uma relação lógica ou ambos.

Para usar registros lógicos, a publicação e os artigos devem atender a vários requisitos. Para obter mais informações, consulte Agrupar alterações a linhas relacionadas com registros lógicos.

Geralmente, essa opção é usada para um artigo que tem uma referência de chave estrangeira para uma tabela de chave primária publicada, e, a tabela da chave primária tem um filtro definido nesse artigo. O subconjunto de linhas de chave primária é usado para determinar as linhas da chave estrangeira que são replicadas para o Assinante.

Você não pode adicionar um filtro de junção entre dois artigos publicados quando as tabelas de origem de ambos os artigos compartilham o mesmo nome de objeto de tabela. Nesse caso, mesmo que ambas as tabelas sejam de propriedade de esquemas diferentes e tenham nomes de artigo exclusivos, a criação do filtro de junção irá falhar.

Quando um filtro de linha e um filtro de junção com parâmetros são usados no mesmo artigo de tabela, a replicação determinará se uma linha pertence a uma partição de Assinante. Ele faz isso avaliando a função de filtragem ou o filtro de junção (usando o operador OR), em vez de avaliar a interseção das duas condições (usando o operador AND).

Exemplo

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.EmployeeID = 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

Permissões

Somente os membros da função de servidor fixa sysadmin ou db_owner função de banco de dados fixa podem executar sp_addmergefilter.

Consulte Também

Define an Article
Definir e modificar um filtro de junção entre artigos de mesclagem
Join Filters
sp_changemergefilter (Transact-SQL)
sp_dropmergefilter (Transact-SQL)
sp_helpmergefilter (Transact-SQL)
Procedimentos armazenados de replicação (Transact-SQL)