Definizione e modifica di un filtro colonneDefine and Modify a Column Filter

In questo argomento viene descritto come definire e modificare un filtro colonne in SQL Server 2017SQL Server 2017 tramite SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.This topic describes how to define and modify a column filter in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

Contenuto dell'argomentoIn This Topic

Prima di iniziare Before You Begin

Limitazioni e restrizioni Limitations and Restrictions

  • Alcune colonne non possono essere filtrate. Per altre informazioni, vedere Filtrare i dati pubblicati.Some columns cannot be filtered; for more information, see Filter Published Data. 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.If you modify a column filter after subscriptions have been initialized, you must generate a new snapshot and reinitialize all subscriptions after making the change. Per altre informazioni sui requisiti per la modifica delle proprietà, vedere Modificare le proprietà di pubblicazioni e articoli.For more information about requirements for property changes, see Change Publication and Article Properties.

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

Definire i filtri colonne nella pagina Articoli della Creazione guidata nuova pubblicazione.Define column filters on the Articles page of the New Publication Wizard. Per altre informazioni sull'uso della Creazione guidata nuova pubblicazione, vedere Creare una pubblicazione.For more information about using the New Publication Wizard, see Create a Publication.

Definire e modificare i filtri di colonna nella pagina Articoli della finestra di dialogo Proprietà pubblicazione - <Pubblicazione>.Define and modify column filters on the Articles page of the Publication Properties - <Publication> dialog box. Per altre informazioni sulla modifica delle proprietà di pubblicazione, vedere Visualizzare e modificare le proprietà della pubblicazione.For more information about publication and article properties, see View and Modify Publication Properties.

Per definire un filtro colonneTo define a column filter

  1. Nella pagina Articoli della Creazione guidata nuova pubblicazione espandere la tabella da filtrare nel riquadro Oggetti da pubblicare .On the Articles page of the New Publication Wizard, expand the table to be filtered in the Objects to publish pane.

  2. Deselezionare la casella di controllo accanto a ogni colonna che si desidera filtrare.Clear the check box next to each column you want to filter.

Per modificare l'applicazione di filtri di colonnaTo modify column filtering

  1. Nella pagina Articoli della finestra di dialogo Proprietà pubblicazione - <Pubblicazione> espandere la tabella da filtrare nel riquadro Oggetti da pubblicare.On the Articles page of the Publication Properties - <Publication> dialog box, expand the table to be filtered in the Objects to publish pane.

  2. 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.Clear the check box next to each column you want to filter, and ensure that the check box is selected for each column that should be included in the article.

  3. Fare clic su OK.Click OK.

Utilizzo di Transact-SQL Using 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.When creating table articles, you can define which columns to include in the article and change the columns after the article has been defined. È possibile creare e modificare a livello di programmazione le colonne filtrate tramite le stored procedure di replica.You can create and modify filtered columns programmatically using replication stored procedures.

Nota

Nelle procedure seguenti si presuppone che la tabella sottostante non sia modificata.The following procedures assume that the underlying table has not changed. Per informazioni sulla replica di modifiche DDL (Data Definition Language) in tabelle pubblicate, vedere Apportare modifiche allo schema nei database di pubblicazione.For information on replicating data definition language (DDL) changes to published tables, see Make Schema Changes on Publication Databases.

Per definire un filtro di colonna per un articolo pubblicato di una pubblicazione snapshot o transazionaleTo define a column filter for an article published in a snapshot or transactional publication

  1. Definire l'articolo da filtrare.Define the article to filter. Per altre informazioni, vedere Define an Article.For more information, see Define an Article.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_articlecolumn.At the Publisher on the publication database, execute sp_articlecolumn. Verranno definite le colonne da includere o rimuovere dall'articolo.This defines the columns to include or remove from the article.

    • Se si intende pubblicare solo alcune colonne di una tabella contenente molte colonne, eseguire sp_articlecolumn una volta per ogni colonna da aggiungere.If publishing only a few columns from a table with many columns, execute sp_articlecolumn once for each column being added. Specificare il nome della colonna per @column e il valore add per @operation.Specify the column name for @column and a value of add for @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.If publishing most of the columns in a table with many columns, execute sp_articlecolumn, specifying a value of null for @column and a value of add for @operation to add all columns. 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.Then execute sp_articlecolumn, once for each column being excluded, specifying a value of drop for @operation and the excluded column name for @column.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_articleview.At the Publisher on the publication database, execute sp_articleview. Specificare il nome della pubblicazione per @publication e il nome dell'articolo filtrato per @article.Specify the publication name for @publication and the name of the filtered article for @article. Verranno creati gli oggetti di sincronizzazione per l'articolo filtrato.This creates the synchronization objects for the filtered article.

Per modificare un filtro colonne in modo da includere colonne aggiuntive per un articolo pubblicato di una pubblicazione snapshot o transazionaleTo change a column filter to include additional columns for an article published in a snapshot or transactional publication

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_articlecolumn una volta per ogni colonna da aggiungere.At the Publisher on the publication database, execute sp_articlecolumn once for each column being added. Specificare il nome della colonna per @column e il valore add per @operation.Specify the column name for @column and a value of add for @operation.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_articleview.At the Publisher on the publication database, execute sp_articleview. Specificare il nome della pubblicazione per @publication e il nome dell'articolo filtrato per @article.Specify the publication name for @publication and the name of the filtered article for @article. Se per la pubblicazione esistono sottoscrizioni, specificare il valore 1 per @change_active.If the publication has existing subscriptions, specify a value of 1 for @change_active. Verranno creati nuovamente gli oggetti di sincronizzazione per l'articolo filtrato.This re-creates the synchronization objects for the filtered article.

  3. Rieseguire il processo dell'agente snapshot per la pubblicazione per generare uno snapshot aggiornato.Rerun the Snapshot Agent job for the publication to generate an updated snapshot.

  4. Reinizializzazione delle sottoscrizioni.Reinitialize subscriptions. Per altre informazioni, vedere Reinizializzare le sottoscrizioni.For more information, see Reinitialize Subscriptions.

Per modificare un filtro colonne in modo da rimuovere colonne per un articolo pubblicato di una pubblicazione snapshot o transazionaleTo change a column filter to remove columns for an article published in a snapshot or transactional publication

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_articlecolumn una volta per ogni colonna da rimuovere.At the Publisher on the publication database, execute sp_articlecolumn once for each column being removed. Specificare il nome della colonna per @column e il valore drop per @operation.Specify the column name for @column and a value of drop for @operation.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_articleview.At the Publisher on the publication database, execute sp_articleview. Specificare il nome della pubblicazione per @publication e il nome dell'articolo filtrato per @article.Specify the publication name for @publication and the name of the filtered article for @article. Se per la pubblicazione esistono sottoscrizioni, specificare il valore 1 per @change_active.If the publication has existing subscriptions, specify a value of 1 for @change_active. Verranno creati nuovamente gli oggetti di sincronizzazione per l'articolo filtrato.This re-creates the synchronization objects for the filtered article.

  3. Rieseguire il processo dell'agente snapshot per la pubblicazione per generare uno snapshot aggiornato.Rerun the Snapshot Agent job for the publication to generate an updated snapshot.

  4. Reinizializzazione delle sottoscrizioni.Reinitialize subscriptions. Per altre informazioni, vedere Reinizializzare le sottoscrizioni.For more information, see Reinitialize Subscriptions.

Per definire un filtro di colonna per un articolo pubblicato di una pubblicazione di tipo mergeTo define a column filter for an article published in a merge publication

  1. Definire l'articolo da filtrare.Define the article to filter. Per altre informazioni, vedere Define an Article.For more information, see Define an Article.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_mergearticlecolumn.At the Publisher on the publication database, execute sp_mergearticlecolumn. Verranno definite le colonne da includere o rimuovere dall'articolo.This defines the columns to include or remove from the article.

    • Se si intende pubblicare solo alcune colonne di una tabella contenente molte colonne, eseguire sp_mergearticlecolumn una volta per ogni colonna da aggiungere.If publishing only a few columns from a table with many columns, execute sp_mergearticlecolumn once for each column being added. Specificare il nome della colonna per @column e il valore add per @operation.Specify the column name for @column and a value of add for @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.If publishing most of the columns in a table with many columns, execute sp_mergearticlecolumn, specifying a value of null for @column and a value of add for @operation to add all columns. 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.Then execute sp_mergearticlecolumn, once for each column being excluded, specifying a value of drop for @operation and the excluded column name for @column.

Per modificare un filtro colonne in modo da includere colonne aggiuntive per un articolo pubblicato di una pubblicazione di tipo mergeTo change a column filter to include additional columns for an article published in a merge publication

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_mergearticlecolumn una volta per ogni colonna da aggiungere.At the Publisher on the publication database, execute sp_mergearticlecolumn once for each column being added. 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.Specify the column name for @column, a value of add for @operation and a value of 1 for both @force_invalidate_snapshot and @force_reinit_subscription.

  2. Rieseguire il processo dell'agente snapshot per la pubblicazione per generare uno snapshot aggiornato.Rerun the Snapshot Agent job for the publication to generate an updated snapshot.

  3. Reinizializzazione delle sottoscrizioni.Reinitialize subscriptions. Per altre informazioni, vedere Reinizializzare le sottoscrizioni.For more information, see Reinitialize Subscriptions.

Per modificare un filtro colonne in modo da rimuovere colonne per un articolo pubblicato di una pubblicazione di tipo mergeTo change a column filter to remove columns for an article published in a merge publication

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_mergearticlecolumn una volta per ogni colonna da rimuovere.At the Publisher on the publication database, execute sp_mergearticlecolumn once for each column being removed. 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.Specify the column name for @column, a value of drop for @operation and a value of 1 for both @force_invalidate_snapshot and @force_reinit_subscription.

  2. Rieseguire il processo dell'agente snapshot per la pubblicazione per generare uno snapshot aggiornato.Rerun the Snapshot Agent job for the publication to generate an updated snapshot.

  3. Reinizializzazione delle sottoscrizioni.Reinitialize subscriptions. Per altre informazioni, vedere Reinizializzare le sottoscrizioni.For more information, see Reinitialize Subscriptions.

Esempio (Transact-SQL) Example (Transact-SQL)

In questo esempio di replica transazionale la colonna DaysToManufacture viene rimossa da un articolo basato sulla tabella Product .In this transactional replication example, the DaysToManufacture column is removed from an article based on the Product table.

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 .In this merge replication example, the CreditCardApprovalCode column is removed from an article based on the SalesOrderHeader table.

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

Vedere ancheSee Also

Modificare le proprietà di pubblicazioni e articoli Change Publication and Article Properties
Filtrare i dati pubblicati Filter Published Data
Filtrare i dati pubblicati per la replica di tipo mergeFilter Published Data for Merge Replication