Definizione e modifica di un filtro colonne

In questo argomento viene descritto come definire e modificare un filtro colonne in SQL Server 2012 tramite SQL Server Management Studio o Transact-SQL.

Contenuto dell'argomento

  • Prima di iniziare:

    Limitazioni e restrizioni

  • Per definire e modificare un filtro colonne, utilizzando:

    SQL Server Management Studio

    Transact-SQL

Prima di iniziare

Limitazioni e restrizioni

  • Alcune colonne non possono essere filtrate. Per ulteriori informazioni, vedere Filtro dei 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 ulteriori informazioni sui requisiti per la modifica delle proprietà, vedere Modifica delle proprietà di pubblicazioni e articoli.

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]

Utilizzo di SQL Server Management Studio

Definire i filtri colonne nella pagina Articoli della Creazione guidata nuova pubblicazione. Per ulteriori informazioni sull'utilizzo della Creazione guidata nuova pubblicazione, vedere Creazione di una pubblicazione.

Definire e modificare i filtri colonne nella pagina Articoli della finestra di dialogo Proprietà pubblicazione - <Pubblicazione>. Per ulteriori informazioni sulle proprietà di pubblicazioni e articoli, vedere Visualizzazione e modifica delle proprietà della pubblicazione.

Per definire un filtro colonne

  1. Nella pagina Articoli della Creazione guidata nuova pubblicazione espandere la tabella da filtrare nel riquadro Oggetti da pubblicare.

  2. Deselezionare la casella di controllo accanto a ogni colonna che si desidera filtrare.

Per modificare l'applicazione di filtri di colonna

  1. Nella pagina Articoli della finestra di dialogo Proprietà pubblicazione - <Pubblicazione> espandere la tabella da filtrare nel riquadro Oggetti da pubblicare.

  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.

  3. Fare clic su OK.  

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]

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 Modifiche allo schema nei database di pubblicazione.

Per definire un filtro di colonna per un articolo pubblicato di una pubblicazione snapshot o transazionale

  1. Definire l'articolo da filtrare. Per ulteriori informazioni, vedere Definizione di un articolo.

  2. 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.

  3. 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

  1. 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.

  2. 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.

  3. Rieseguire il processo dell'agente snapshot per la pubblicazione per generare uno snapshot aggiornato.

  4. Reinizializzare le sottoscrizioni. Per ulteriori 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

  1. 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.

  2. 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.

  3. Rieseguire il processo dell'agente snapshot per la pubblicazione per generare uno snapshot aggiornato.

  4. Reinizializzare le sottoscrizioni. Per ulteriori informazioni, vedere Reinizializzare le sottoscrizioni.

Per definire un filtro di colonna per un articolo pubblicato di una pubblicazione di tipo merge

  1. Definire l'articolo da filtrare. Per ulteriori informazioni, vedere Definizione di un articolo.

  2. 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

  1. 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.

  2. Rieseguire il processo dell'agente snapshot per la pubblicazione per generare uno snapshot aggiornato.

  3. Reinizializzare le sottoscrizioni. Per ulteriori 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

  1. 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.

  2. Rieseguire il processo dell'agente snapshot per la pubblicazione per generare uno snapshot aggiornato.

  3. Reinizializzare le sottoscrizioni. Per ulteriori 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

Icona freccia utilizzata con il collegamento Torna all'inizio[Top]

Vedere anche

Concetti

Modifica delle proprietà di pubblicazioni e articoli

Filtro dei dati pubblicati

Filtro dei dati pubblicati per la replica di tipo merge