sys.sp_articleview (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL Managed Instance

Maakt de weergave aan die het gepubliceerde artikel definieert wanneer een tabel verticaal of horizontaal wordt gefilterd. Deze weergave wordt gebruikt als de gefilterde bron van het schema en de gegevens voor de bestemmingstabellen. Alleen niet-abonneerde artikelen kunnen met deze opgeslagen procedure worden gewijzigd. Deze opgeslagen procedure wordt uitgevoerd bij Publisher in de publicatiedatabase.

Transact-SQL syntaxis-conventies

Syntax

sys.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 ]
[ ; ]

Arguments

[ @publication = ] N'publicatie'

De naam van de publicatie waarin het artikel staat. @publication is sysname, zonder standaard.

[ @article = ] N'artikel'

De naam van het artikel. @article is sysname, zonder standaard.

[ @view_name = ] N'view_name'

De naam van de visie die het gepubliceerde artikel definieert. @view_name is nvarchar(386), met een standaard van NULL.

[ @filter_clause = ] N'filter_clause'

Een restrictieclausule (WHERE) die een horizontaal filter definieert. Vergeet bij het invoeren van de beperkingsclausule het WHERE trefwoord. @filter_clause is nvarchar(max), met een standaard van NULL.

[ @change_active = ] change_active

Maakt het mogelijk om de kolommen in publicaties met abonnementen aan te passen. @change_active is int, met een standaard van 0.

  • Als 0, worden kolommen niet gewijzigd.
  • Als 1, kunnen weergaven worden aangemaakt of opnieuw aangemaakt op actieve artikelen met abonnementen.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Erkent dat de actie die door deze opgeslagen procedure wordt uitgevoerd, een bestaande snapshot ongeldig kan maken. @force_invalidate_snapshot is bit, met een standaardwaarde van 0.

  • 0 geeft aan dat wijzigingen in het artikel niet ertoe leiden dat de momentopname ongeldig is. Als de opgeslagen procedure detecteert dat de wijziging een nieuwe snapshot vereist, ontstaat er een fout en worden er geen wijzigingen aangebracht.
  • 1 specificeert dat wijzigingen in het artikel ervoor kunnen zorgen dat de snapshot ongeldig wordt, en als er bestaande abonnementen zijn die een nieuwe snapshot vereisen, geeft het toestemming om de bestaande snapshot als verouderd te markeren en een nieuwe snapshot te genereren.

[ @force_reinit_subscription = ] force_reinit_subscription

Erkent dat de actie die door deze opgeslagen procedure wordt ondernomen, mogelijk vereist dat bestaande abonnementen opnieuw worden geïntialiseerd. @force_reinit_subscription is bit, met een standaardwaarde van 0.

  • 0 geeft aan dat wijzigingen in het artikel niet ertoe leiden dat het abonnement opnieuw wordt geïnitialiseerd. Als de opgeslagen procedure detecteert dat de wijziging vereist dat abonnementen opnieuw geïnitialiseerd worden, treedt er een fout op en worden er geen wijzigingen aangebracht.
  • 1 specificeert dat wijzigingen in het artikel ervoor zorgen dat bestaande abonnementen opnieuw worden geïntitimiliseerd, en geeft toestemming voor de herinitialisatie van het abonnement.

[ @publisher = ] N'uitgever'

Hiermee geeft u een niet-SQL Server-uitgever. @publisher is sysname, met als standaard NULL.

@publisher mag niet worden gebruikt bij het publiceren vanuit een SQL Server Publisher.

[ @refreshsynctranprocs = ] refreshsynctranprocs

Specificeert of de opgeslagen procedures die worden gebruikt om replicatie te synchroniseren automatisch opnieuw worden aangemaakt. @refreshsynctranprocs is bit, met als standaard .1

  • 1 betekent dat de opgeslagen procedures worden nagemaakt.
  • 0 Betekent dat de opgeslagen procedures niet worden nagemaakt.

[ @internal = ] intern

Alleen ter informatie geïdentificeerd. Wordt niet ondersteund. Toekomstige compatibiliteit is niet gegarandeerd.

Codewaarden retourneren

0 (geslaagd) of 1 (mislukt).

Remarks

sp_articleview maakt de view aan die het gepubliceerde artikel definieert en voegt de ID van deze view in in de sync_objid kolom van de sysarticles-tabel , en voegt de tekst van de restrictieclausule in de filter_clause kolom in. Als alle kolommen zijn gerepliceerd en er geen filter_clauseis, wordt de sync_objid in de sysarticles-tabel ingesteld op de ID van de basistabel, en is het gebruik van niet sp_articleview vereist.

Om een verticaal gefilterde tabel te publiceren (dat wil zeggen, om kolommen te filteren), voer sp_addarticle je eerst uit zonder @sync_object parameter, voer sp_articlecolumn één keer uit voor elke kolom die gerepliceerd moet worden (definieer de verticale filter), en voer sp_articleview vervolgens uit om de weergave te creëren die het gepubliceerde artikel definieert.

Om een horizontaal gefilterde tabel te publiceren (dat wil zeggen, om rijen te filteren), voer sp_addarticle uit zonder @filter_name parameter. Voer sp_articlefilter uit en geef alle parameters inclusief @filter_clause. Voer sp_articleviewvervolgens uit , waarbij alle parameters inclusief identieke @filter_clause worden geleverd.

Om een verticaal en horizontaal gefilterde tabel te publiceren, voer sp_addarticle uit zonder @sync_object of @filter_name parameters. Voer sp_articlecolumn één keer uit voor elke kolom die gerepliceerd moet worden, en voer dan sp_articlefilter en sp_articleview.

Als het artikel al een view heeft die het gepubliceerde artikel definieert, sp_articleview verwijder je de bestaande view en maak je automatisch een nieuwe aan. Als de view handmatig is aangemaakt (type in sysarticles is dat 5), wordt de bestaande view niet verwijderd.

Als je een aangepaste filterstored procedure en een view maakt die het gepubliceerde artikel handmatig definieert, voer sp_articleviewdan niet . Geef deze waarden in plaats daarvan als de @filter_name en @sync_object parameters om te sp_addarticle, samen met de juiste @type waarde.

Examples

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

Permissions

Alleen leden van de sysadmin-vaste serverrol of db_owner vaste databaserol kunnen uitvoeren sp_articleview.