Определение и изменение статического строкового фильтра
В этом разделе описывается определение и изменение статического строкового фильтра SQL Server 2012 при помощи среды Среда SQL Server Management Studio или Transact-SQL.
В этом разделе
Перед началом работы выполните следующие действия.
Ограничения
Рекомендации
Для определения и изменения статической строковой фильтрации используется:
Среда SQL Server Management Studio
Transact-SQL
Перед началом
Ограничения
Если добавление, изменение или удаление статической строковой фильтрацией выполняется после инициализации подписок на публикацию, следует создать новый моментальный снимок и повторно инициализировать все подписки после внесения изменений. Дополнительные сведения о требованиях к изменениям свойств см. в разделе Изменение свойств публикации и статьи.
Если публикация включена для одноранговой репликации транзакций, таблицы не могут быть отфильтрованы.
Рекомендации
- Поскольку эти фильтры являются статическими, все подписчики получат один и тот же поднабор данных. Если необходимо динамически фильтровать строки в статье таблицы, принадлежащей к публикации слиянием, чтобы каждый подписчик получал собственную секцию данных, см. раздел Определение и изменение параметризованного фильтра строк для статьи публикации слиянием. Репликация слиянием также позволяет фильтровать связанные строки на основе существующего фильтра строк. Дополнительные сведения см. в разделе Определение и изменение фильтра соединения между статьями публикации слиянием.
[Top]
Использование среды SQL Server Management Studio
Определение, изменение и удаление статических фильтров строк выполняется на странице Фильтрация строк таблицы мастера создания публикаций или на странице Фильтрация строк диалогового окна Свойства публикации — <публикация>. Дополнительные сведения об использовании этого мастера и о доступе к этому диалоговому окну см. в разделах Создание публикации и Просмотр и изменение свойств публикации.
Определение статического фильтра строк
Действия, выполняемые на странице Фильтрация строк таблицы мастера создания публикаций или на странице Фильтрация строк диалогового окна Свойства публикации — <публикация>, зависят от типа публикации.
Для публикации моментальных снимков или публикации транзакций щелкните Добавить.
Для публикации слиянием щелкните Добавить, а затем щелкните Добавить фильтр.
В окне Добавление фильтра выберите в раскрывающемся списке таблицу для фильтрации.
Создайте инструкцию фильтра в текстовом поле Инструкция фильтра. Можно выполнить ввод в тестовом поле или перетащить столбцы из списка Столбцы.
Примечание В предложении WHERE необходимо использовать имена, состоящие из двух частей; имена, состоящие из трех или четырех частей, не поддерживаются. Если публикация является публикацией от издателя Oracle, предложение WHERE должно соответствовать синтаксису Oracle.
Текстовая область Инструкция фильтра содержит текст по умолчанию в следующем виде:
SELECT <published_columns> FROM [schema].[tablename] WHERE
Текст по умолчанию изменять нельзя. Введите предложение фильтра после ключевого слова WHERE, используя стандартный синтаксис SQL. Законченное предложение фильтра должно выглядеть следующим образом:
SELECT <published_columns> FROM [HumanResources].[Employee] WHERE [LoginID] = 'adventure-works\ranjit0'
В статическом фильтре строк может содержаться определяемая пользователем функция. Полное предложение фильтра для статического фильтра строк с определяемой пользователем функцией должно выглядеть следующим образом:
SELECT <published_columns> FROM [Sales].[SalesOrderHeader] WHERE MyFunction([Freight]) > 100
Нажмите кнопку ОК.
В диалоговом окне Свойства публикации — <публикация> нажмите кнопку ОК, чтобы сохранить результаты и закрыть диалоговое окно.
Изменение статического фильтра строк
На странице Фильтрация строк таблицы мастера создания публикаций или на странице Фильтрация строк диалогового окна Свойства публикаций — <публикация> выберите фильтр на панели Отфильтрованные таблицы, а затем щелкните Изменить.
В окне Изменение фильтра измените фильтр.
Нажмите кнопку ОК.
Удаление статического фильтра строк
- На странице Фильтрация строк таблицы мастера создания публикаций или на странице Фильтрация строк диалогового окна Свойства публикаций — <публикация> выберите фильтр на панели Отфильтрованные таблицы, а затем щелкните Удалить.
[Top]
Использование Transact-SQL
При создании статей таблиц можно определить предложение WHERE для фильтрации строк из статьи. Также можно изменить фильтр строк уже после того, как он был определен. Статические фильтры строк можно создавать и изменять программно, с помощью хранимых процедур репликации.
Определение статического фильтра строк для публикации транзакций или публикации моментальных снимков
Определите статью для фильтрации. Дополнительные сведения см. в разделе Определение статьи.
В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_articlefilter (Transact-SQL)). Укажите имя статьи в параметре @article, имя публикации в параметре @publication, имя фильтра в параметре @filter_name и предложение фильтрации в параметре @filter_clause (не включая WHERE).
При необходимости определения фильтра столбцов см. раздел Определение или изменение фильтра столбцов. В противном случае выполните процедуру sp_articleview (Transact-SQL). В параметре @publication укажите имя публикации, в параметре @article — имя фильтруемой статьи, а в параметре @filter_clause — условие фильтра, указанное на шаге 2. Будут созданы объекты синхронизации для отфильтрованной статьи.
Изменение статического фильтра строк для моментального снимка публикации транзакций
В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_articlefilter (Transact-SQL)). Укажите имя статьи в параметре @article, имя публикации в параметре @publication, имя фильтра в параметре @filter_name и новое предложение фильтрации в параметре @filter_clause (не включая WHERE). Поскольку это изменение приведет к недействительности данных в существующей подписке, в параметре @force_reinit_subscription необходимо указать значение 1.
В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_articleview (Transact-SQL)). В параметре @publication укажите имя публикации, в параметре @article — имя фильтруемой статьи, а в параметре @filter_clause — условие фильтра, указанное на шаге 1. В результате будет повторно создано представление, определяющее опубликованную статью.
Чтобы сформировать обновленный моментальный снимок, перезапустите задание агента моментальных снимков для публикации. Дополнительные сведения см. в разделе Создание и применение исходного моментального снимка.
Повторная инициализация подписок. Дополнительные сведения см. в разделе Повторная инициализация подписок.
Удаление статического фильтра строк для моментального снимка публикации транзакций
В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_articlefilter (Transact-SQL)). Укажите имя статьи в параметре @article, имя публикации в параметре @publication, значение NULL в параметре @filter_name и NULL в параметре @filter_clause. Поскольку это изменение приведет к недействительности данных в существующей подписке, в параметре @force_reinit_subscription необходимо указать значение 1.
Чтобы сформировать обновленный моментальный снимок, перезапустите задание агента моментальных снимков для публикации. Дополнительные сведения см. в разделе Создание и применение исходного моментального снимка.
Повторная инициализация подписок. Дополнительные сведения см. в разделе Повторная инициализация подписок.
Определение статического фильтра строк для публикации слиянием
В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_addmergearticle (Transact-SQL)). Укажите предложение фильтрации в параметре @subset_filterclause (не включая WHERE). Дополнительные сведения см. в разделе Определение статьи.
При необходимости определения фильтра столбцов см. раздел Определение или изменение фильтра столбцов.
Изменение статического фильтра строк для публикации слиянием
В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_changemergearticle (Transact-SQL)). Укажите имя публикации в параметре @publication, имя фильтруемой статьи в параметре @article, значение свойства subset_filterclause в параметре @property и новое предложение фильтра в параметре @value (не включая WHERE). Поскольку в результате этого изменения данные в существующей подписке станут недопустимыми, укажите значение 1 в параметре @force_reinit_subscription.
Чтобы сформировать обновленный моментальный снимок, перезапустите задание агента моментальных снимков для публикации. Дополнительные сведения см. в разделе Создание и применение исходного моментального снимка.
Повторная инициализация подписок. Дополнительные сведения см. в разделе Повторная инициализация подписок.
Примеры (Transact-SQL)
В этом примере репликации транзакций статья фильтруется горизонтально, чтобы удалить все неподдерживаемые продукты.
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
В этом примере репликации слиянием статьи фильтруются горизонтально, чтобы возвратить только строки, связанные с указанным менеджером по продажам. Также используется фильтр соединения. Дополнительные сведения см. в разделе Определение и изменение фильтра соединения между статьями публикации слиянием.
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
[Top]
См. также
Основные понятия
Определение и изменение параметризованного фильтра строк для статьи публикации слиянием
Изменение свойств публикации и статьи