Compartir a través de


sp_articleview (Transact-SQL)

Se aplica a: SQL Server Azure SQL Managed Instance

Crea la vista que define el artículo publicado cuando una tabla se filtra horizontal o verticalmente. Esta vista se utiliza como el origen filtrado del esquema y los datos de las tablas de destino. Con este procedimiento almacenado solamente pueden modificarse artículos sin suscripciones. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicación.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_articleview
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @view_name = ] N'view_name' ]
    [ , [ @filter_clause = ] N'filter_clause' ]
    [ , [ @change_active = ] change_active ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @refreshsynctranprocs = ] refreshsynctranprocs ]
    [ , [ @internal = ] internal ]
[ ; ]

Argumentos

[ @publication = ] N'publication'

Nombre de la publicación que contiene el artículo. @publication es sysname, sin ningún valor predeterminado.

[ @article = ] N'article'

Nombre del artículo. @article es sysname, sin ningún valor predeterminado.

[ @view_name = ] N'view_name'

Nombre de la vista que define el artículo publicado. @view_name es nvarchar(386), con un valor predeterminado de NULL.

[ @filter_clause = ] N'filter_clause'

Cláusula de restricción (WHERE) que define un filtro horizontal. Al escribir la cláusula de restricción, omita la WHERE palabra clave . @filter_clause es nvarchar(max), con un valor predeterminado de NULL.

[ @change_active = ] change_active

Permite modificar las columnas en publicaciones con suscripciones. @change_active es int, con un valor predeterminado de 0.

  • Si 0es , no se cambian las columnas.
  • Si 1es , las vistas se pueden crear o volver a crear en artículos activos que tienen suscripciones.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Confirma que la acción realizada por este procedimiento almacenado podría invalidar una instantánea existente. @force_invalidate_snapshot es bit, con un valor predeterminado de 0.

  • 0 especifica que los cambios realizados en el artículo no hacen que la instantánea no sea válida. 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 hacer que la instantánea no sea válida y, si hay suscripciones existentes que requerirían una nueva instantánea, concede permiso para que la instantánea existente se marque como obsoleta y se genere una nueva instantánea.

[ @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 bit, con un valor predeterminado de 0.

  • 0 especifica que los cambios realizados en el artículo no hacen que se reinicialice la suscripción. 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 realizados en el artículo hacen que se reinicialice la suscripción existente y que se conceda permiso para que se produzca la reinicialización de la suscripción.

[ @publisher = ] N'publisher'

Especifica un publicador que no es de SQL Server. @publisher es sysname, con un valor predeterminado de NULL.

@publisher no se debe usar al publicar desde un publicador de SQL Server.

[ @refreshsynctranprocs = ] refreshsynctranprocs

Especifica si los procedimientos almacenados usados para sincronizar la replicación se vuelven a crear automáticamente. @refreshsynctranprocs es bit, con un valor predeterminado de 1.

  • 1 significa que los procedimientos almacenados se vuelven a crear.
  • 0 significa que los procedimientos almacenados no se vuelven a crear.

[ @internal = ] internal

Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Comentarios

sp_articleview crea la vista que define el artículo publicado e inserta el identificador de esta vista en la sync_objid columna de la tabla sysarticles e inserta el texto de la cláusula de restricción en la filter_clause columna. Si todas las columnas se replican y no hay ninguna filter_clause, en sync_objid la tabla sysarticles se establece en el identificador de la tabla base y no se requiere el uso de sp_articleview .

Para publicar una tabla filtrada verticalmente (es decir, para filtrar columnas) primero ejecute sin parámetro @sync_object, ejecute sp_articlecolumn una vez para cada columna que se va a replicar (definiendo el filtro vertical) y, a continuación, ejecute sp_articleview para crear la vista que define el artículo publicado.sp_addarticle

Para publicar una tabla filtrada horizontalmente (es decir, para filtrar filas), ejecute sp_addarticle sin parámetro @filter_name . Ejecute sp_articlefilter, proporcionando todos los parámetros, incluidos los @filter_clause. A continuación, ejecute sp_articleviewy proporcione todos los parámetros, incluidos los @filter_clause idénticos.

Para publicar una tabla filtrada vertical y horizontalmente, ejecute sp_addarticle sin parámetros @sync_object ni @filter_name . Ejecute sp_articlecolumn una vez para cada columna que se va a replicar y, a continuación, ejecute sp_articlefilter y sp_articleview.

Si el artículo ya tiene una vista que define el artículo publicado, sp_articleview quita la vista existente y crea una nueva automáticamente. Si la vista se creó manualmente (type en sysarticles es 5), la vista existente no se quita.

Si crea un procedimiento almacenado de filtro personalizado y una vista que define el artículo publicado manualmente, no ejecute sp_articleview. En su lugar, proporcione estos valores como los parámetros @filter_name y @sync_object para sp_addarticle, junto con el valor de @type adecuado.

Ejemplos

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

Solo los miembros del rol fijo de servidor sysadmin o db_owner rol fijo de base de datos pueden ejecutar sp_articleview.