Определение или изменение фильтра столбцов

Применимо к: даSQL Server (все поддерживаемые версии) ДаУправляемый экземпляр SQL Azure

В этом разделе описывается определение и изменение фильтра столбцов SQL Server при помощи среды SQL Server Management Studio или Transact-SQL.

В этом разделе

Перед началом

Ограничения

  • К некоторым столбцам фильтрация не может применяться. Дополнительные сведения см. в статье Фильтрация опубликованных данных. При изменении фильтра столбцов после инициализации подписок необходимо создать новый моментальный снимок и выполнить повторную инициализацию всех подписок после выполнения изменений. Дополнительные сведения о требованиях к изменениям свойств см. в статье Изменение свойств публикации и статьи.

Использование среды SQL Server Management Studio

Определение фильтров столбцов выполняется на странице Статьи мастера создания публикации. Дополнительные сведения об использовании мастера создания публикации см. в статье Создание публикации.

Определите и измените фильтры столбцов на странице Статьи диалогового окна Свойства публикации — <Publication> . Дополнительные сведения об изменении свойств публикаций и статей см. в этой статье.

Определение фильтра столбцов

  1. На странице Статьи мастера создания публикации раскройте таблицу, которую необходимо отфильтровать, на панели Объекты для публикации .

  2. Снимите флажки рядом со столбцами, которые необходимо отфильтровать.

Изменение параметров фильтрации столбцов

  1. На странице Статьи диалогового окна Свойства публикации — <Publication> , на панели Объекты для публикации разверните таблицу, которую хотите отфильтровать.

  2. Снимите флажки рядом со столбцами, которые необходимо отфильтровать, и проверьте, чтобы были установлены флажки для столбцов, которые должны быть включены в статью.

  3. Нажмите кнопку ОК.

Использование Transact-SQL

При создании статей таблицы можно определить столбцы, которые нужно включить в статью, и изменить эти столбцы после определения статьи. Можно создать и изменить фильтруемые столбцы программно с помощью хранимых процедур репликации.

Примечание

В следующей процедуре предполагается, что базовая таблица не изменилась. Сведения о репликации изменений, выполненных с помощью языка DDL, в опубликованные таблицы см. в статье Внесение изменений в схемы баз данных публикации.

Определение фильтра столбца для статьи, опубликованной в публикации моментальных снимков или публикации транзакций

  1. Определите статью для фильтрации. Дополнительные сведения см. в статье определить статью.

  2. На издателе в базе данных публикации выполните хранимую процедуру sp_articlecolumn. Столбцы для включения в статью или удаления из нее будут определены.

    • При публикации нескольких столбцов из таблицы с большим числом столбцов выполните хранимую процедуру sp_articlecolumn один раз для каждого добавляемого столбца. Укажите имя столбца в параметре @column и значение add в параметре @operation.

    • При публикации большинства столбцов таблицы с большим числом столбцов выполните хранимую процедуру sp_articlecolumn, указав значение NULL в параметре @column и значение add в параметре @operation, чтобы добавить все столбцы. Затем выполните хранимую процедуру sp_articlecolumn один раз для каждого исключаемого столбца, указав значение drop в параметре @operation и имя исключаемого столбца в параметре @column.

  3. В базе данных публикации на издателе выполните процедуру sp_articleview. Укажите имя публикации в параметре @publication, а имя отфильтрованной статьи — в параметре @article. Будут созданы объекты синхронизации для отфильтрованной статьи.

Изменение фильтра столбца с целью включения дополнительных столбцов в статью, опубликованную в публикации моментальных снимков или публикации транзакций

  1. На издателе в базе данных публикации выполните хранимую процедуру sp_articlecolumn один раз для каждого добавляемого столбца. Укажите имя столбца в параметре @column и значение add в параметре @operation.

  2. В базе данных публикации на издателе выполните процедуру sp_articleview. Укажите имя публикации в параметре @publication, а имя отфильтрованной статьи — в параметре @article. Если у публикации есть существующие подписки, укажите в параметре @change_active значение 1. Объекты синхронизации для отфильтрованной статьи при этом будут повторно созданы.

  3. Чтобы сформировать обновленный моментальный снимок, перезапустите задание агента моментальных снимков для публикации.

  4. Повторная инициализация подписок. Дополнительные сведения см. в статье Повторная инициализация подписок.

Изменение фильтра столбца с целью удаления столбцов из статьи, опубликованной в публикации моментальных снимков или публикации транзакций

  1. На издателе в базе данных публикации выполните хранимую процедуру sp_articlecolumn один раз для каждого удаляемого столбца. Укажите имя столбца в параметре @column и значение drop в параметре @operation.

  2. В базе данных публикации на издателе выполните процедуру sp_articleview. Укажите имя публикации в параметре @publication, а имя отфильтрованной статьи — в параметре @article. Если у публикации есть существующие подписки, укажите в параметре @change_active значение 1. Объекты синхронизации для отфильтрованной статьи при этом будут повторно созданы.

  3. Чтобы сформировать обновленный моментальный снимок, перезапустите задание агента моментальных снимков для публикации.

  4. Повторная инициализация подписок. Дополнительные сведения см. в статье Повторная инициализация подписок.

Определение фильтра столбца для статьи, опубликованной в публикации слиянием

  1. Определите статью для фильтрации. Дополнительные сведения см. в статье определить статью.

  2. На издателе в базе данных публикации выполните хранимую процедуру sp_mergearticlecolumn. Столбцы для включения в статью или удаления из нее будут определены.

    • При публикации нескольких столбцов таблицы с большим числом столбцов выполните хранимую процедуру sp_mergearticlecolumn один раз для каждого добавляемого столбца. Укажите имя столбца в параметре @column и значение add в параметре @operation.

    • При публикации большинства столбцов таблицы с большим числом столбцов выполните хранимую процедуру sp_mergearticlecolumn, указав значение NULL в параметре @column и значение add в параметре @operation, чтобы добавить все столбцы. Затем выполните хранимую процедуру sp_mergearticlecolumn один раз для каждого исключаемого столбца, указав значение drop в параметре @operation и имя исключаемого столбца в параметре @column.

Изменение фильтра столбца с целью включения дополнительных столбцов в статью, опубликованную в публикации слиянием

  1. На издателе в базе данных публикации выполните хранимую процедуру sp_mergearticlecolumn один раз для каждого добавляемого столбца. Укажите имя столбца в параметре @column, значение add в параметре @operation и значение 1 как в параметре @force_invalidate_snapshot, так и в параметре @force_reinit_subscription.

  2. Чтобы сформировать обновленный моментальный снимок, перезапустите задание агента моментальных снимков для публикации.

  3. Повторная инициализация подписок. Дополнительные сведения см. в статье Повторная инициализация подписок.

Изменение фильтра столбца с целью удаления столбцов из статьи, опубликованной в публикации слиянием

  1. На издателе в базе данных публикации выполните хранимую процедуру sp_mergearticlecolumn один раз для каждого удаляемого столбца. Укажите имя столбца в параметре @column, значение drop в параметре @operation и значение 1 как в параметре @force_invalidate_snapshot, так и в параметре @force_reinit_subscription.

  2. Чтобы сформировать обновленный моментальный снимок, перезапустите задание агента моментальных снимков для публикации.

  3. Повторная инициализация подписок. Дополнительные сведения см. в статье Повторная инициализация подписок.

Примеры (Transact-SQL)

В этом примере репликации транзакций столбец DaysToManufacture удаляется из статьи, основанной на таблице 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

В этом примере репликации слиянием столбец CreditCardApprovalCode удаляется из статьи, основанной на таблице 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

См. также:

Изменение свойств публикации и статьи
Фильтрация опубликованных данных
Фильтрация опубликованных данных для репликации слиянием