sp_articlefilter (Transact-SQL)
Filtra los datos que se publican en función de un artículo de tabla. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicaciones.
Sintaxis
sp_articlefilter [ @publication = ] 'publication'
, [ @article = ] 'article'
[ , [ @filter_name = ] 'filter_name' ]
[ , [ @filter_clause = ] 'filter_clause' ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ , [ @publisher = ] 'publisher' ]
Argumentos
[ @publication=] 'publication'
Es el nombre de la publicación que contiene el artículo. publication es de tipo sysname y no tiene ningún valor predeterminado.[ @article=] 'article'
Es el nombre del artículo. article es de tipo sysname y no tiene ningún valor predeterminado.[ @filter_name=] 'filter_name'
Es el nombre del procedimiento almacenado de filtro que se va a crear a partir de filter_name. filter_name es de tipo nvarchar(386) y su valor predeterminado es NULL. Debe especificar un nombre único para el filtro de artículo.[ @filter_clause=] 'filter_clause'
Es una cláusula de restricción (WHERE) que define un filtro horizontal. Cuando escriba la cláusula de restricción, omita la palabra clave WHERE. filter_clause es de tipo ntext y su valor predeterminado es NULL.[ @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 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 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 no provocarán la reinicialización de las suscripciones. Si el procedimiento almacenado detecta que el cambio requiere la reinicialización de suscripciones, se producirá un error y no se realizarán cambios.
1 especifica que los cambios que se realicen en el artículo harán que se reinicialicen las suscripciones existentes y concede permiso para que esta reinicialización se lleve a cabo.
[ @publisher= ] 'publisher'
Especifica un publicador que no es de MicrosoftSQL Server. publisher es de tipo sysname y su valor predeterminado es NULL.[!NOTA]
publisher no debe utilizarse con un publicador de SQL Server.
Valores de código de retorno
0 (correcto) o 1 (error)
Notas
sp_articlefilter se utiliza en la replicación de instantáneas y en la replicación transaccional.
Al ejecutar sp_articlefilter para un artículo con suscripciones existentes, es necesario reinicializar esas suscripciones.
sp_articlefilter crea el filtro, inserta el Id. del procedimiento almacenado de filtro en la columna filter de la tabla sysarticles (Transact-SQL) y, a continuación, inserta el texto de la cláusula de restricción en la columna filter_clause.
Para crear un artículo con un filtro horizontal, ejecute sp_addarticle (Transact-SQL) sin el parámetro filter. Ejecute sp_articlefilter proporcionando todos los parámetros, incluido filter_clause, y después ejecute sp_articleview (Transact-SQL), proporcionando todos los parámetros, incluido el mismo parámetro filter_clause. Si el filtro ya existe y la columna type de sysarticles es 1 (artículo basado en el registro), se elimina el filtro anterior y se crea uno nuevo.
Si no se proporcionan filter_name y filter_clause, se elimina el filtro anterior y el Id. de filtro se establece en 0.
Ejemplo
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
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_articlefilter.
Vea también