sp_addmergefilter (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate) SìIstanza gestita di SQL di Azure

Aggiunge un nuovo filtro di merge per la creazione di una partizione in base a un join con un'altra tabella. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

  
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 ]  

Argomenti

[ @publication = ] 'publication' Nome della pubblicazione in cui viene aggiunto il filtro di merge. publication è sysname, senza alcun valore predefinito.

[ @article = ] 'article' Nome dell'articolo in cui viene aggiunto il filtro di merge. article è sysname, senza alcun valore predefinito.

[ @filtername = ] 'filtername' Nome del filtro. filtername è un parametro obbligatorio. filtername è sysname, senza alcun valore predefinito.

[ @join_articlename = ] 'join_articlename' Articolo padre a cui l'articolo figlio, specificato dall'articolo , deve essere unito tramite la clausola join specificata da join_filterclause, per determinare le righe nell'articolo figlio che soddisfano il criterio di filtro del filtro di merge. join_articlename è sysname, senza alcun valore predefinito. L'articolo deve essere nella pubblicazione specificata dalla pubblicazione.

[ @join_filterclause = ] join_filterclauseClausola join che deve essere utilizzata per unire l'articolo figlio specificato dall'articolo e dall'articolo padre specificati da join_article, per determinare le righe che qualificano il filtro di merge. join_filterclause è nvarchar(1000).

[ @join_unique_key = ] join_unique_keySpecifica se il join tra l'articolo figlio e l'articolo padre join_article è uno-a-molti, uno-a-uno, molti-a-uno o molti-a-molti. join_unique_key è int, con il valore predefinito 0. 0 indica un join molti-a-uno o molti-a-molti. 1 indica un join uno-a-uno o uno-a-molti. Questo valore è 1 quando le colonne di join formano una chiave univoca in join_article o se join_filterclause è tra una chiave esterna nell'articolo e una chiave primaria in join_article .

Attenzione

Impostare questo parametro su 1 solo se si dispone di un vincolo sulla colonna di join nella tabella sottostante per l'articolo padre che garantisce l'univocità. Se join_unique_key è impostato su 1 in modo non corretto, potrebbe verificarsi la non convergenza dei dati.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot Riconosce che l'azione eseguita da questo stored procedure può invalidare uno snapshot esistente. force_invalidate_snapshot è un bit, con un valore predefinito 0.

0 specifica che le modifiche all'articolo di merge non causeranno l'invalido dello 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 all'articolo di merge possono causare l'invalido dello snapshot e, se sono presenti sottoscrizioni esistenti che richiedono un nuovo snapshot, concede l'autorizzazione per lo snapshot esistente per essere contrassegnato come obsoleto e un nuovo snapshot generato.

[ @force_reinit_subscription = ] force_reinit_subscription Riconosce che l'azione eseguita da questo stored procedure può richiedere la reinizializzazione delle sottoscrizioni esistenti. force_reinit_subscription è un bit, con il valore predefinito 0.

0 specifica che le modifiche all'articolo di merge non causeranno 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 specifica che le modifiche all'articolo di merge causeranno la reinizializzazione delle sottoscrizioni esistenti e concede l'autorizzazione per la reinizializzazione della sottoscrizione.

[ @filter_type = ] filter_type Specifica il tipo di filtro aggiunto. filter_type è tinyint e può essere uno dei valori seguenti.

Valore Descrizione
1 Solo filtro di join. Obbligatorio per SQL Server Compact supportare i Sottoscrittori.
2 Solo relazione tra record logici.
3 Filtro di join e relazione tra record logici.

Per altre informazioni, vedere Raggruppare modifiche alle righe correlate con record logici.

Valori del codice restituito

0 (esito positivo) o 1 (errore)

Commenti

sp_addmergefilter viene usato nella replica di tipo merge.

sp_addmergefilter può essere usato solo con gli articoli di tabella. Gli articoli di vista e di vista indicizzata non sono supportati.

Questa procedura può inoltre essere utilizzata per aggiungere una relazione logica tra due articoli che possono essere uniti o meno tramite un filtro di join. filter_type viene usato per specificare se il filtro di merge aggiunto è un filtro di join, una relazione logica o entrambi.

Per utilizzare record logici, è necessario che la pubblicazione e gli articoli soddisfino alcuni requisiti. Per altre informazioni, vedere Raggruppare modifiche alle righe correlate con record logici.

Questa opzione viene generalmente utilizzata per gli articoli che includono un riferimento di chiave esterna a una chiave primaria su una tabella pubblicata e tale tabella include un filtro definito nell'articolo corrispondente. Il subset di righe della chiave primaria viene utilizzato per determinare le righe di chiave esterna da replicare nel Sottoscrittore.

Non è possibile aggiungere un filtro di join tra due articoli pubblicati se le tabelle di origine per entrambi gli articoli condividono lo stesso nome di oggetto tabella. In questo caso, anche se entrambe le tabelle appartengono a schemi diversi e sono caratterizzate da nomi di articolo univoci, la creazione del filtro di join avrà esito negativo.

In caso di utilizzo di un filtro di riga con parametri e un filtro di join in un articolo di tabella, la replica determina se una riga appartiene a una partizione del Sottoscrittore Questa operazione viene eseguita valutando la funzione di filtro o il filtro join (usando l'operatore OR), anziché valutando l'intersezione delle due condizioni (usando l'operatore AND).

Esempio

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

Autorizzazioni

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

Vedere anche

Define an Article
Definizione e modifica di un filtro di join tra articoli di merge
Join Filters
sp_changemergefilter (Transact-SQL)
sp_dropmergefilter (Transact-SQL)
sp_helpmergefilter (Transact-SQL)
Stored procedure per la replica (Transact-SQL)