Definizione e modifica di un filtro colonne
Si applica a: SQL Server e
Istanza gestita di SQL di Azure
Questo argomento descrive come definire e modificare un filtro colonne in SQL Server tramite SQL Server Management Studio o Transact-SQL.
Contenuto dell'articolo
Prima di iniziare:
Per definire e modificare un filtro colonne, utilizzando:
Prima di iniziare
Limitazioni e restrizioni
- Alcune colonne non possono essere filtrate. Per altre informazioni, vedere Filtrare i dati pubblicati. Se si modifica un filtro di colonna dopo l'inizializzazione delle sottoscrizioni, dopo la modifica è necessario generare un nuovo snapshot e reinizializzare tutte le sottoscrizioni. Per altre informazioni sui requisiti per la modifica delle proprietà, vedere Modificare le proprietà di pubblicazioni e articoli.
Utilizzo di SQL Server Management Studio
Definire i filtri colonne nella pagina Articoli della Creazione guidata nuova pubblicazione. Per altre informazioni sull'uso della Creazione guidata nuova pubblicazione, vedere Creare una pubblicazione.
Definire e modificare i filtri di colonna nella pagina Articoli della finestra di dialogo Proprietà pubblicazione - <Pubblicazione>. Per altre informazioni sulla modifica delle proprietà di pubblicazione, vedere Visualizzare e modificare le proprietà della pubblicazione.
Per definire un filtro colonne
Nella pagina Articoli della Creazione guidata nuova pubblicazione espandere la tabella da filtrare nel riquadro Oggetti da pubblicare .
Deselezionare la casella di controllo accanto a ogni colonna che si desidera filtrare.
Per modificare l'applicazione di filtri di colonna
Nella pagina Articoli della finestra di dialogo Proprietà pubblicazione - <Pubblicazione> espandere la tabella da filtrare nel riquadro Oggetti da pubblicare.
Deselezionare la casella di controllo accanto a ogni colonna che si desidera filtrare e verificare che la casella di controllo sia selezionata per ogni colonna da includere nell'articolo.
Seleziona OK.
Utilizzo di Transact-SQL
Durante la creazione di articoli di tabella è possibile definire le colonne da includere nell'articolo e modificare le colonne dopo aver definito l'articolo. È possibile creare e modificare a livello di programmazione le colonne filtrate tramite le stored procedure di replica.
Nota
Nelle procedure seguenti si presuppone che la tabella sottostante non sia modificata. Per informazioni sulla replica di modifiche DDL (Data Definition Language) in tabelle pubblicate, vedere Apportare modifiche allo schema nei database di pubblicazione.
Per definire un filtro di colonna per un articolo pubblicato di una pubblicazione snapshot o transazionale
Definire l'articolo da filtrare. Per altre informazioni, vedere definire un articolo.
Nel database di pubblicazione del server di pubblicazione eseguire sp_articlecolumn. Verranno definite le colonne da includere o rimuovere dall'articolo.
Se si intende pubblicare solo alcune colonne di una tabella contenente molte colonne, eseguire sp_articlecolumn una volta per ogni colonna da aggiungere. Specificare il nome della colonna per @column e il valore add per @operation.
Se si intende pubblicare la maggior parte delle colonna di una tabella contenente molte colonne, eseguire sp_articlecolumn, specificando il valore null per @column e il valore add per @operation per aggiungere tutte le colonne. Eseguire quindi sp_articlecolumn, una volta per ogni colonna da escludere, specificando il valore drop per @operation e il nome della colonna esclusa per @column.
Nel database di pubblicazione del server di pubblicazione eseguire sp_articleview. Specificare il nome della pubblicazione per @publication e il nome dell'articolo filtrato per @article. Verranno creati gli oggetti di sincronizzazione per l'articolo filtrato.
Per modificare un filtro colonne in modo da includere colonne aggiuntive per un articolo pubblicato di una pubblicazione snapshot o transazionale
Nel database di pubblicazione del server di pubblicazione eseguire sp_articlecolumn una volta per ogni colonna da aggiungere. Specificare il nome della colonna per @column e il valore add per @operation.
Nel database di pubblicazione del server di pubblicazione eseguire sp_articleview. Specificare il nome della pubblicazione per @publication e il nome dell'articolo filtrato per @article. Se per la pubblicazione esistono sottoscrizioni, specificare il valore 1 per @change_active. Verranno creati nuovamente gli oggetti di sincronizzazione per l'articolo filtrato.
Rieseguire il processo dell'agente snapshot per la pubblicazione per generare uno snapshot aggiornato.
Reinizializzazione delle sottoscrizioni. Per altre informazioni, vedere Reinizializzare le sottoscrizioni.
Per modificare un filtro colonne in modo da rimuovere colonne per un articolo pubblicato di una pubblicazione snapshot o transazionale
Nel database di pubblicazione del server di pubblicazione eseguire sp_articlecolumn una volta per ogni colonna da rimuovere. Specificare il nome della colonna per @column e il valore drop per @operation.
Nel database di pubblicazione del server di pubblicazione eseguire sp_articleview. Specificare il nome della pubblicazione per @publication e il nome dell'articolo filtrato per @article. Se per la pubblicazione esistono sottoscrizioni, specificare il valore 1 per @change_active. Verranno creati nuovamente gli oggetti di sincronizzazione per l'articolo filtrato.
Rieseguire il processo dell'agente snapshot per la pubblicazione per generare uno snapshot aggiornato.
Reinizializzazione delle sottoscrizioni. Per altre informazioni, vedere Reinizializzare le sottoscrizioni.
Per definire un filtro di colonna per un articolo pubblicato di una pubblicazione di tipo merge
Definire l'articolo da filtrare. Per altre informazioni, vedere definire un articolo.
Nel database di pubblicazione del server di pubblicazione eseguire sp_mergearticlecolumn. Verranno definite le colonne da includere o rimuovere dall'articolo.
Se si intende pubblicare solo alcune colonne di una tabella contenente molte colonne, eseguire sp_mergearticlecolumn una volta per ogni colonna da aggiungere. Specificare il nome della colonna per @column e il valore add per @operation.
Se si intende pubblicare la maggior parte delle colonna di una tabella contenente molte colonne, eseguire sp_mergearticlecolumn, specificando il valore null per @column e il valore add per @operation per aggiungere tutte le colonne. Eseguire quindi sp_mergearticlecolumn, una volta per ogni colonna da escludere, specificando il valore drop per @operation e il nome della colonna esclusa per @column.
Per modificare un filtro colonne in modo da includere colonne aggiuntive per un articolo pubblicato di una pubblicazione di tipo merge
Nel database di pubblicazione del server di pubblicazione eseguire sp_mergearticlecolumn una volta per ogni colonna da aggiungere. Specificare il nome della colonna per @column, il valore add per @operation e il valore 1 sia per @force_invalidate_snapshot che per @force_reinit_subscription.
Rieseguire il processo dell'agente snapshot per la pubblicazione per generare uno snapshot aggiornato.
Reinizializzazione delle sottoscrizioni. Per altre informazioni, vedere Reinizializzare le sottoscrizioni.
Per modificare un filtro colonne in modo da rimuovere colonne per un articolo pubblicato di una pubblicazione di tipo merge
Nel database di pubblicazione del server di pubblicazione eseguire sp_mergearticlecolumn una volta per ogni colonna da rimuovere. Specificare il nome della colonna per @column, il valore drop per @operation e il valore 1 sia per @force_invalidate_snapshot che per @force_reinit_subscription.
Rieseguire il processo dell'agente snapshot per la pubblicazione per generare uno snapshot aggiornato.
Reinizializzazione delle sottoscrizioni. Per altre informazioni, vedere Reinizializzare le sottoscrizioni.
Esempio (Transact-SQL)
In questo esempio di replica transazionale la colonna DaysToManufacture
viene rimossa da un articolo basato sulla tabella Product
.
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
In questo esempio di replica di tipo merge la colonna CreditCardApprovalCode
viene rimossa da un articolo basato sulla tabella SalesOrderHeader
.
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.BusinessEntityID = 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
Vedi anche
Modificare le proprietà di pubblicazioni e articoli
Filtrare i dati pubblicati
Filtrare i dati pubblicati per la replica di tipo merge