sp_addmergefilter (Transact-SQL)

Agrega un nuevo filtro de mezcla para crear una partición basada en una combinación con otra tabla. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicaciones.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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'
    Es el nombre de la publicación en la que se agrega el filtro de mezcla. publication es de tipo sysname y no tiene ningún valor predeterminado.

  • [ @article= ] 'article'
    Es el nombre de la publicación en la que se agrega el filtro de mezcla. article es de tipo sysname y no tiene ningún valor predeterminado.

  • [ @filtername= ] 'filtername'
    Es el nombre del filtro. filtername es un parámetro obligatorio. filternamees de tipo sysname y no tiene ningún valor predeterminado.

  • [ @join_articlename= ] 'join_articlename'
    Es el artículo primario con el que debe combinarse el artículo secundario, especificado en article, utilizando la cláusula de combinación especificada en join_filterclause, para determinar las filas del artículo secundario que cumplen el criterio del filtro de mezcla.join_articlename es de tipo sysname y no tiene ningún valor predeterminado. El artículo debe encontrarse en la publicación proporcionada en publication.

  • [ @join_filterclause= ] join_filterclause
    Es la cláusula de combinación que debe utilizarse para combinar el artículo secundario especificado en articley el artículo primario especificado en join_article para determinar las filas que cumplen los criterios del filtro de mezcla. join_filterclause es de tipo nvarchar(1000).

  • [ @join_unique_key= ] join_unique_key
    Especifica si la combinación entre el artículo secundario articley el artículo primario join_articlees de uno a varios, de uno a uno, de varios a uno o de varios a varios. join_unique_key es de tipo int y su valor predeterminado es 0. 0 indica una combinación de varios a uno o de varios a varios. 1 indica una combinación de uno a uno o de uno a varios. Este valor es 1 cuando las columnas de combinación forman una clave única en join_article, o si join_filterclause es una combinación entre una clave externa de article y una clave principal de join_article.

    Nota de advertenciaAdvertencia

    Establezca este parámetro en 1 sólo si tiene una restricción en la columna de combinación de la tabla subyacente del artículo primario que garantiza su existencia única. Si join_unique_key se establece en 1 de manera incorrecta, se puede producir la no convergencia de los datos.

  • [ @force_invalidate_snapshot= ] force_invalidate_snapshot
    Confirma que la acción realizada por este procedimiento almacenado puede invalidar una instantánea existente. force_invalidate_snapshot es de tipo bit y su valor predeterminado es 0.

    0 especifica que los cambios en el artículo de mezcla no invalidarán la instantánea. Si el procedimiento almacenado detecta que el cambio requiere una nueva instantánea, se producirá un error y no se realizarán cambios.

    1 especifica que los cambios realizados en el artículo de mezcla pueden invalidar la instantánea y, si hay suscripciones existentes que requieran una nueva instantánea, concede permiso para marcar como obsoleta la instantánea existente y generar una nueva.

  • [ @force_reinit_subscription= ] force_reinit_subscription
    Confirma que la acción realizada por este procedimiento almacenado puede requerir la reinicialización de las suscripciones existentes. force_reinit_subscription es de tipo bit y su valor predeterminado es 0.

    0 especifica que los cambios en el artículo de mezcla no harán que se reinicialice la suscripción. Si el procedimiento almacenado detecta que el cambio requiere que se reinicialicen las suscripciones, se producirá un error y no se realizarán cambios.

    1 especifica que los cambios realizados en el artículo de mezcla harán que se reinicialicen las suscripciones existentes y concede permiso para que se lleve a cabo la reinicialización.

  • [ @filter_type= ] filter_type
    Especifica el tipo de filtro que se agrega. filter_type es de tipo tinyint y puede tener uno de los valores siguientes.

    Valor

    Descripción

    1

    Sólo filtro de combinación. Requerido para admitir suscriptores de SQL Server Compact 3.5 SP1.

    2

    Sólo relación de registros lógicos.

    3

    Filtro de combinación y relación de registros lógicos.

    Para obtener más información, vea Agrupar cambios en filas relacionadas con registros lógicos.

Valores de código de retorno

0 (correcto) o 1 (error)

Notas

sp_addmergefilter se utiliza en la replicación de mezcla.

sp_addmergefilter sólo se puede utilizar con artículos de tabla. No se admiten los artículos de vista ni de vista indizada.

Este procedimiento se puede utilizar también para agregar una relación lógica entre dos artículos que pueden tener o no un filtro de combinación entre ellos. filter_type se utiliza para especificar si el filtro de mezcla que se agrega es un filtro de combinación, una relación lógica o ambas cosas.

Para utilizar registros lógicos, la publicación y los artículos deben satisfacer una serie de requisitos. Para obtener más información, vea Agrupar cambios en filas relacionadas con registros lógicos.

Esta opción se usa normalmente para un artículo que tiene una referencia de clave externa a una tabla de clave principal publicada y la tabla de clave principal tiene un filtro definido en su artículo. El subconjunto de filas de clave principal se usa para determinar las filas de clave externa que se replican en el suscriptor.

No se puede agregar un filtro de combinación entre dos artículos publicados cuando las tablas de origen de ambos artículos comparten el mismo nombre de objeto de tabla. En tal caso, aunque ambas tablas sean propiedad de esquemas diferentes y tengan nombres de artículo únicos, se producirá un error en la creación del filtro de combinación.

Cuando se utilizan un filtro de combinación y un filtro de fila con parámetros en un artículo de tabla, la replicación determina si una fila pertenece a una partición de suscriptor. Para ello, evalúa la función de filtrado o el filtro de combinación (mediante el operador OR), en lugar de evaluar la intersección de las dos condiciones (mediante el operador AND).

Ejemplo

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

Permisos

Sólo los miembros de la función fija de servidor sysadmin o de la función fija de base de datos db_owner pueden ejecutar sp_addmergefilter.