sp_articleview (Transact-SQL)

Crea la vista che definisce l'articolo pubblicato quando una tabella viene filtrata in senso verticale o orizzontale. Questa vista viene utilizzata come origine filtrata dello schema e dei dati per le tabelle di destinazione. Solo gli articoli non sottoscritti possono essere modificati tramite questa stored procedure. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • [ @publication=] 'publication'
    Nome della pubblicazione contenente l'articolo. publication è di tipo sysname e non prevede alcun valore predefinito.

  • [ @article=] 'article'
    Nome dell'articolo. article è di tipo sysname e non prevede alcun valore predefinito.

  • [ @view_name=] 'view_name'
    Nome della vista che definisce l'articolo pubblicato. view_name è di tipo nvarchar(386) e il valore predefinito è NULL.

  • [ @filter_clause=] 'filter_clause'
    Clausola di restrizione (WHERE) che definisce un filtro orizzontale. Quando si specifica la clausola di restrizione, omettere la parola chiave WHERE. filter_clause è di tipo ntext e il valore predefinito è NULL.

  • [ @change_active = ] change_active
    Consente di modificare le colonne delle pubblicazioni a cui sono associate sottoscrizioni. change_active è di tipo int e il valore predefinito è 0. Se è 0 le colonne non vengono modificate. Se è 1, è possibile creare o ricreare viste in articoli attivi a cui sono associate sottoscrizioni.

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    Segnala che l'azione eseguita da questa stored procedure potrebbe invalidare uno snapshot esistente. force_invalidate_snapshot è di tipo bit e il valore predefinito è 0.

    0 specifica che le modifiche apportate all'articolo non invalideranno lo snapshot. Se la stored procedure rileva che la modifica richiede un nuovo snapshot, viene generato un errore e non viene apportata alcuna modifica.

    1 specifica che le modifiche apportate all'articolo potrebbero invalidare lo snapshot e, se vi sono sottoscrizioni che richiedono un nuovo snapshot, consente di contrassegnare lo snapshot esistente come obsoleto e di generarne uno nuovo.

  • [ @force_reinit_subscription = ] force_reinit_subscription
    Segnala che l'azione eseguita da questa stored procedure potrebbe richiedere la reinizializzazione di sottoscrizioni esistenti. force_reinit_subscription è di tipo bit e il valore predefinito è 0.

    0 specifica che le modifiche apportate all'articolo non causano la reinizializzazione della sottoscrizione. Se la stored procedure rileva che la modifica richiede la reinizializzazione delle sottoscrizioni, viene generato un errore e non viene apportata alcuna modifica.

    1 indica che le modifiche all'articolo comportano la reinizializzazione delle sottoscrizioni esistenti e consente la reinizializzazione.

  • [ @publisher= ] 'publisher'
    Specifica un server di pubblicazione non Microsoft SQL Server. publisher è di tipo sysname e il valore predefinito è NULL.

    Nota

    Non utilizzare publisher se si utilizza un server di pubblicazione SQL Server.

  • [ @refreshsynctranprocs = ] refreshsynctranprocs
    Indica che le stored procedure utilizzate per sincronizzare la replica vengono ricreate automaticamente. refreshsynctranprocs è di tipo bit e il valore predefinito è 1.

    1 indica che le stored procedure vengono ricreate.

    0 indica che le stored procedure non vengono ricreate.

  • [ @internal= ] internal
    Identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Osservazioni

sp_articleview crea la vista che definisce l'articolo pubblicato e inserisce l'ID della vista nella colonna sync_objid della tabella sysarticles (Transact-SQL), quindi inserisce il testo della clausola di restrizione nella colonna filter_clause. Se tutte le colonne vengono replicate e non è specificato filter_clause, la colonna sync_objid della tabella sysarticles (Transact-SQL) viene impostata sull'ID della tabella di base e non è necessario utilizzare sp_articleview.

Per pubblicare una tabella filtrata in verticale (ovvero per filtrare le colonne), eseguire innanzitutto sp_addarticle senza il parametro sync_object, quindi eseguire sp_articlecolumn (Transact-SQL) una volta per ogni colonna da replicare (che definisce il filtro verticale) e infine eseguire sp_articleview per creare la vista che definisce l'articolo pubblicato.

Per pubblicare una tabella filtrata in orizzontale (ovvero per filtrare le righe), eseguire sp_addarticle (Transact-SQL) senza il parametro filter. Eseguire quindi sp_articlefilter (Transact-SQL), specificando tutti i parametri con filter_clause. Eseguire infine sp_articleview, specificando tutti i parametri con lo stesso valore filter_clause.

Per pubblicare una tabella filtrata in verticale e in orizzontale, eseguire sp_addarticle (Transact-SQL) senza i parametri sync_object e filter. Eseguire sp_articlecolumn (Transact-SQL) una volta per ogni colonna da replicare, quindi eseguire sp_articlefilter (Transact-SQL) e sp_articleview.

Se l'articolo include già una vista che definisce l'articolo pubblicato, sp_articleview elimina la vista esistente e ne crea una nuova automaticamente. Se la vista è stata creata in modo manuale (il valore di type in sysarticles (Transact-SQL) è 5), la vista esistente non viene eliminata.

Se si crea una stored procedure di filtro personalizzata e una vista che definisce l'articolo pubblicato manualmente, non eseguire sp_articleview. Passare, invece, tali elementi come parametri filter e sync_object a sp_addarticle (Transact-SQL), insieme al valore type appropriato.

Esempio

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

Autorizzazioni

Solo i membri del ruolo predefinito del server sysadmin o del ruolo predefinito del database db_owner possono eseguire sp_articleview.