정적 행 필터 정의 및 수정Define and Modify a Static Row Filter

SQL Server 2017SQL Server 2017 또는 SQL Server Management StudioSQL Server Management Studio 을 사용하여 Transact-SQLTransact-SQL에서 정적 행 필터를 정의하고 수정하는 방법에 대해 설명합니다.This topic describes how to define and modify a static row filter in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

항목 내용In This Topic

시작하기 전 주의 사항 Before You Begin

제한 사항 Limitations and Restrictions

  • 게시에 대한 구독이 초기화된 후 정적 행 필터를 추가, 수정 또는 삭제한 경우에는 변경 내용을 적용한 후에 새 스냅숏을 생성하고 모든 구독을 다시 초기화해야 합니다.If you add, modify, or delete a static row filter after subscriptions to the publication have been initialized, you must generate a new snapshot and reinitialize all subscriptions after making the change. 속성 변경 요구 사항에 대한 자세한 내용은 게시 및 아티클 속성 변경을 참조하세요.For more information about requirements for property changes, see Change Publication and Article Properties.

  • 게시에서 피어 투 피어 트랜잭션 복제를 사용할 수 있도록 설정한 경우에는 테이블을 필터링할 수 없습니다.If the publication is enabled for peer-to-peer transactional replication, tables cannot be filtered.

권장 사항 Recommendations

SQL Server Management Studio 사용 Using SQL Server Management Studio

새 게시 마법사의 테이블 행 필터 페이지 또는 게시 속성 - <게시> 대화 상자의 행 필터 페이지에서 정적 행 필터를 정의, 수정 및 삭제합니다.Define, modify, and delete static row filters on the Filter Table Rows page of the New Publication Wizard or the Filter Rows page of the Publication Properties - <Publication> dialog box. 마법사 사용 및 대화 상자 액세스에 대한 자세한 내용은 게시 만들기게시 속성 보기 및 수정을 참조하세요.For more information about using the wizard and accessing the dialog box, see Create a Publication and View and Modify Publication Properties.

정적 행 필터를 정의하려면To define a static row filter

  1. 새 게시 마법사의 테이블 행 필터 페이지 또는 게시 속성 - <게시> 대화 상자의 행 필터 페이지에서 수행하는 작업은 게시 유형에 따라 달라집니다.On the Filter Table Rows page of the New Publication Wizard or the Filter Rows page of the Publication Properties - <Publication> dialog box, the action you take depends on the type of publication:

    • 스냅숏 또는 트랜잭션 게시의 경우 추가를 클릭합니다.For a snapshot or transactional publication, click Add.

    • 병합 게시의 경우 추가를 클릭한 다음 필터 추가를 클릭합니다.For a merge publication, click Add, and then click Add Filter.

  2. 필터 추가 대화 상자의 드롭다운 목록 상자에서 필터링할 테이블을 선택합니다.In the Add Filter dialog box, select a table to filter from the drop-down list box.

  3. 필터 문 텍스트 영역에서 필터 문을 만듭니다.Create a filter statement in the Filter statement text area. 텍스트 영역에 직접 입력할 수도 있고 목록 상자에서 열을 끌어서 놓을 수도 있습니다.You can type directly in the text area, and you can also drag and drop columns from the Columns list box.

    참고

    WHERE 절은 두 부분으로 구성된 이름을 사용해야 하며 세 부분 또는 네 부분으로 구성된 이름은 지원되지 않습니다.The WHERE clause should use two-part naming; three-part naming and four-part naming are not supported. Oracle 게시자의 게시인 경우 WHERE 절은 Oracle 구문과 호환되어야 합니다.If the publication is from an Oracle Publisher, the WHERE clause must be compliant with Oracle syntax.

    • 필터 문 텍스트 영역에는 다음 형식의 기본 텍스트가 포함됩니다.The Filter statement text area includes the default text, which is in the form of:

      SELECT <published_columns> FROM [schema].[tablename] WHERE  
      
    • 기본 텍스트는 변경할 수 없습니다. 표준 SQL 구문을 사용하여 WHERE 키워드 뒤에 필터 절을 입력합니다.The default text cannot be changed; type the filter clause after the WHERE keyword using standard SQL syntax. 전체 필터 절은 다음과 같습니다.The complete filter clause would appear like:

      SELECT <published_columns> FROM [HumanResources].[Employee] WHERE [LoginID] = 'adventure-works\ranjit0'  
      
    • 정적 행 필터에는 사용자 정의 함수가 포함될 수 있습니다.A static row filter can include a user-defined function. 사용자 정의 함수가 있는 정적 행 필터에 대한 전체 필터 절은 다음과 같습니다.The complete filter clause for a static row filter with a user-defined function would appear like:

      SELECT <published_columns> FROM [Sales].[SalesOrderHeader] WHERE MyFunction([Freight]) > 100  
      
  4. 확인을 클릭합니다.Click OK.

  5. 게시 속성 - <게시> 대화 상자에 있는 경우 확인을 클릭하여 대화 상자를 저장하고 닫습니다.If you are in the Publication Properties - <Publication> dialog box, click OK to save and close the dialog box.

정적 행 필터를 수정하려면To modify a static row filter

  1. 새 게시 마법사의 테이블 행 필터 페이지 또는 게시 속성 - <게시> 대화 상자의 행 필터 페이지에 있는 필터링된 테이블 창에서 필터를 선택하고 편집을 클릭합니다.On the Filter Table Rows page of the New Publication Wizard or the Filter Rows page of the Publication Properties - <Publication> dialog box, select a filter in the Filtered Tables pane, and then click Edit.

  2. 필터 편집 대화 상자에서 필터를 수정합니다.In the Edit Filter dialog box, modify the filter.

  3. 확인을 클릭합니다.Click OK.

정적 행 필터를 삭제하려면To delete a static row filter

  1. 새 게시 마법사의 테이블 행 필터 페이지 또는 게시 속성 - <게시> 대화 상자의 행 필터 페이지에 있는 필터링된 테이블 창에서 필터를 선택하고 삭제를 클릭합니다.On the Filter Table Rows page of the New Publication Wizard or the Filter Rows page of the Publication Properties - <Publication> dialog box, select a filter in the Filtered Tables pane, and then click Delete.

Transact-SQL 사용 Using Transact-SQL

테이블 아티클을 만들 때 WHERE 절을 정의하여 아티클에서 행을 필터링할 수 있습니다.When creating table articles, you can define a WHERE clause to filter rows out of an article. 정의한 행 필터를 변경할 수도 있습니다.You can also change a row filter after it has been defined. 복제 저장 프로시저를 사용하면 정적 행 필터를 프로그래밍 방식으로 만들거나 수정할 수 있습니다.Static row filters can be created and modified programmatically using replication stored procedures.

스냅숏 또는 트랜잭션 게시에 대한 정적 행 필터를 정의하려면To define a static row filter for a snapshot or transactional publication

  1. 필터링할 아티클을 정의합니다.Define the article to filter. 자세한 내용은 아티클을 정의을 참조하세요.For more information, see Define an Article.

  2. 게시 데이터베이스의 게시자에서 sp_articlefilter(Transact-SQL)를 실행합니다.At the Publisher on the publication database, execute sp_articlefilter (Transact-SQL). 이때 @article에 아티클 이름, @publication에 게시 이름, @filter_name에 필터 이름, @filter_clause 에 필터링 절( WHERE포함하지 않음)을 지정합니다.Specify the name of the article for @article, the name of the publication for @publication, a name for the filter for @filter_name, and the filtering clause for @filter_clause (not including WHERE).

  3. 계속 열 필터를 정의하려면 열 필터 정의 및 수정을 참조하세요.If a column filter must still be defined, see Define and Modify a Column Filter. 그러지 않으면 sp_articleview(Transact-SQL)를 실행합니다.Otherwise, execute sp_articleview (Transact-SQL). 이때 @publication에 게시 이름, @article에 필터링된 아티클 이름, @filter_clause에서 정적 행 필터를 정의하고 수정하는 방법에 대해 설명합니다.Specify the publication name for @publication, the name of the filtered article for @article, and the filter clause specified in step 2 for @filter_clause. 이렇게 하면 필터링된 아티클에 대한 동기화 개체가 만들어집니다.This creates the synchronization objects for the filtered article.

스냅숏 또는 트랜잭션 게시에 대한 정적 행 필터를 수정하려면To modify a static row filter for a snapshot or transactional publication

  1. 게시 데이터베이스의 게시자에서 sp_articlefilter(Transact-SQL)를 실행합니다.At the Publisher on the publication database, execute sp_articlefilter (Transact-SQL). 이때 @article에 아티클 이름, @publication에 게시 이름, @filter_name에 새 필터 이름, @filter_clause 에 필터링 절( WHERE포함하지 않음)을 지정합니다.Specify the name of the article for @article, the name of the publication for @publication, a name for the new filter for @filter_name, and the new filtering clause for @filter_clause (not including WHERE). 이와 같이 변경하면 기존 구독의 데이터가 무효화되므로 @force_reinit_subscription@force_reinit_subscription에서 정적 행 필터를 정의하고 수정하는 방법에 대해 설명합니다.Because this change will invalidate data in existing subscriptions, specify a value of 1 for @force_reinit_subscription.

  2. 게시 데이터베이스의 게시자에서 sp_articleview(Transact-SQL)를 실행합니다.At the Publisher on the publication database, execute sp_articleview (Transact-SQL). 이때 @publication에 게시 이름, @article에 필터링된 아티클 이름, @filter_clause에서 정적 행 필터를 정의하고 수정하는 방법에 대해 설명합니다.Specify the publication name for @publication, the name of the filtered article for @article, and the filter clause specified in step 1 for @filter_clause. 이렇게 하면 필터링된 아티클을 정의하는 뷰가 다시 만들어집니다.This re-creates the view that defines the filtered article.

  3. 게시에 대해 스냅숏 에이전트 작업을 다시 실행하여 업데이트된 스냅숏을 생성합니다.Rerun the Snapshot Agent job for the publication to generate an updated snapshot. 자세한 내용은 Create and Apply the Initial Snapshot을 참조하세요.For more information, see Create and Apply the Initial Snapshot.

  4. 구독을 다시 초기화합니다.Reinitialize subscriptions. 자세한 내용은 구독 다시 초기화를 참조하세요.For more information, see Reinitialize Subscriptions.

스냅숏 또는 트랜잭션 게시에 대한 정적 행 필터를 삭제하려면To delete a static row filter for a snapshot or transactional publication

  1. 게시 데이터베이스의 게시자에서 sp_articlefilter(Transact-SQL)를 실행합니다.At the Publisher on the publication database, execute sp_articlefilter (Transact-SQL). 이때 @article에 아티클 이름, @publication에 게시 이름, @filter_name에 NULL 값, @filter_clause에서 정적 행 필터를 정의하고 수정하는 방법에 대해 설명합니다.Specify the name of the article for @article, the name of the publication for @publication, a value of NULL for @filter_name, and a value of NULL for @filter_clause. 이와 같이 변경하면 기존 구독의 데이터가 무효화되므로 @force_reinit_subscription@force_reinit_subscription에서 정적 행 필터를 정의하고 수정하는 방법에 대해 설명합니다.Because this change will invalidate data in existing subscriptions, specify a value of 1 for @force_reinit_subscription.

  2. 게시에 대해 스냅숏 에이전트 작업을 다시 실행하여 업데이트된 스냅숏을 생성합니다.Rerun the Snapshot Agent job for the publication to generate an updated snapshot. 자세한 내용은 Create and Apply the Initial Snapshot을 참조하세요.For more information, see Create and Apply the Initial Snapshot.

  3. 구독을 다시 초기화합니다.Reinitialize subscriptions. 자세한 내용은 구독 다시 초기화를 참조하세요.For more information, see Reinitialize Subscriptions.

병합 게시에 대한 정적 행 필터를 정의하려면To define a static row filter for a merge publication

  1. 게시 데이터베이스의 게시자에서 sp_addmergearticle(Transact-SQL)을 실행합니다.At the Publisher on the publication database, execute sp_addmergearticle (Transact-SQL). 이때 @subset_filterclause 에 필터링 절( WHERE포함하지 않음)을 지정합니다.Specify the filtering clause for @subset_filterclause (not including WHERE). 자세한 내용은 Define an Article을 참조하세요.For more information, see Define an Article.

  2. 계속 열 필터를 정의하려면 Define and Modify a Column Filter을 참조하세요.If a column filter must still be defined, see Define and Modify a Column Filter.

병합 게시에 대한 정적 행 필터를 수정하려면To modify a static row filter for a merge publication

  1. 게시 데이터베이스의 게시자에서 sp_changemergearticle(Transact-SQL)을 실행합니다.At the Publisher on the publication database, execute sp_changemergearticle (Transact-SQL). 이때 @publication에 게시 이름, @article에 필터링된 아티클 이름, @property@property에 새 필터 이름, @value 에 필터링 절( WHERE포함하지 않음)을 지정합니다.Specify the publication name for @publication, the name of the filtered article for @article, a value of subset_filterclause for @property, and the new filtering clause for @value (not including WHERE). 이와 같이 변경하면 기존 구독의 데이터가 무효화되므로 @force_reinit_subscription에서 정적 행 필터를 정의하고 수정하는 방법에 대해 설명합니다.Because this change will invalidate data in existing subscriptions, specify a value of 1 for @force_reinit_subscription.

  2. 게시에 대해 스냅숏 에이전트 작업을 다시 실행하여 업데이트된 스냅숏을 생성합니다.Rerun the Snapshot Agent job for the publication to generate an updated snapshot. 자세한 내용은 Create and Apply the Initial Snapshot을 참조하세요.For more information, see Create and Apply the Initial Snapshot.

  3. 구독을 다시 초기화합니다.Reinitialize subscriptions. 자세한 내용은 구독 다시 초기화를 참조하세요.For more information, see Reinitialize Subscriptions.

예(Transact-SQL) Examples (Transact-SQL)

다음 트랜잭션 복제 예에서는 지원되지 않는 모든 제품을 제거하도록 아티클을 행 필터링합니다.In this transactional replication example, the article is filtered horizontally to remove all discontinued products.

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 this merge replication example, the articles are filtered horizontally to return only rows that belong to the specified salesperson. 조인 필터도 사용합니다.A join filter is also used. 자세한 내용은 Define and Modify a Join Filter Between Merge Articles을 참조하세요.For more information, see Define and Modify a Join Filter Between Merge Articles.

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

관련 항목:See Also

병합 아티클에 대한 매개 변수가 있는 행 필터 정의 및 수정 | Microsoft 문서 Define and Modify a Parameterized Row Filter for a Merge Article
게시 및 아티클 속성 변경 Change Publication and Article Properties
게시된 데이터 필터링 Filter Published Data
병합 복제의 게시된 데이터 필터링Filter Published Data for Merge Replication