열 필터 정의 및 수정Define and Modify a Column 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 column 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

  • 일부 열은 필터링할 수 없습니다. 자세한 내용은 게시된 데이터 필터링을 참조하세요.Some columns cannot be filtered; for more information, see Filter Published Data. 구독을 초기화한 후 열 필터를 수정할 경우 새 스냅숏을 만들고 변경 내용을 적용한 후 모든 구독을 다시 초기화해야 합니다.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. 속성 변경 요구 사항에 대한 자세한 내용은 게시 및 아티클 속성 변경을 참조하세요.For more information about requirements for property changes, see Change Publication and Article Properties.

SQL Server Management Studio 사용 Using SQL Server Management Studio

새 게시 마법사의 아티클 페이지에서 열 필터를 정의합니다.Define column filters on the Articles page of the New Publication Wizard. 새 게시 마법사 사용 방법에 대한 자세한 내용은 게시 만들기를 참조하세요.For more information about using the New Publication Wizard, see Create a Publication.

게시 속성 - <게시> 대화 상자의 아티클 페이지에서 열 필터를 정의하고 수정합니다.Define and modify column filters on the Articles page of the Publication Properties - <Publication> dialog box. 게시 및 아티클 속성에 대한 자세한 내용은 게시 속성 보기 및 수정을 참조하세요.For more information about publication and article properties, see View and Modify Publication Properties.

열 필터를 정의하려면To define a column filter

  1. 새 게시 마법사의 아티클 페이지에 있는 게시할 개체 창에서 필터링할 테이블을 확장합니다.On the Articles page of the New Publication Wizard, expand the table to be filtered in the Objects to publish pane.

  2. 필터링할 각 열 옆에 있는 확인란의 선택을 취소합니다.Clear the check box next to each column you want to filter.

열 필터링을 수정하려면To modify column filtering

  1. 게시 속성 - <게시> 대화 상자의 아티클 페이지에 있는 게시할 개체 창에서 필터링할 테이블을 확장합니다.On the Articles page of the Publication Properties - <Publication> dialog box, expand the table to be filtered in the Objects to publish pane.

  2. 필터링할 각 열 옆에 있는 확인란의 선택은 취소하고 아티클에 포함시킬 각 열에 대한 확인란은 선택합니다.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. 확인을 클릭합니다.Click OK.

Transact-SQL 사용 Using Transact-SQL

테이블 아티클을 만들 때 아티클에 포함할 열을 정의할 수 있으며 아티클이 정의된 후 이 열을 변경할 수 있습니다.When creating table articles, you can define which columns to include in the article and change the columns after the article has been defined. 복제 저장 프로시저를 사용하여 프로그래밍 방식으로 필터링된 열을 만들고 수정할 수 있습니다.You can create and modify filtered columns programmatically using replication stored procedures.

참고

다음 절차에서는 기본 테이블이 변경되지 않은 것으로 가정합니다.The following procedures assume that the underlying table has not changed. DDL(데이터 정의 언어) 변경 내용을 게시된 테이블에 복제하는 방법에 대한 자세한 내용은 게시 데이터베이스의 스키마 변경을 참조하세요.For information on replicating data definition language (DDL) changes to published tables, see Make Schema Changes on Publication Databases.

스냅숏 또는 트랜잭션 게시에 게시된 아티클에 대한 열 필터를 정의하려면To define a column filter for an article published in a snapshot or transactional publication

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

  2. 게시 데이터베이스의 게시자에서 sp_articlecolumn을 실행합니다.At the Publisher on the publication database, execute sp_articlecolumn. 이렇게 하면 아티클에 포함할 열 또는 아티클에서 제거할 열이 정의됩니다.This defines the columns to include or remove from the article.

    • 많은 열을 포함한 테이블에서 몇 개의 열만 게시하는 경우 추가할 각 열에 대해 sp_articlecolumn 을 한 번씩 실행합니다.If publishing only a few columns from a table with many columns, execute sp_articlecolumn once for each column being added. @column에 열 이름을, @operationadd 값을 지정합니다.Specify the column name for @column and a value of add for @operation.

    • 많은 열을 포함한 테이블에서 대부분의 열을 게시하는 경우 sp_articlecolumnnull 에 대한 @column 에 대한 열 이름 및 @operation 에 대한 @operation 을 실행하여 모든 열을 추가합니다.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. 그런 다음 sp_articlecolumndrop 에 대한 @operation 에 제외되는 열 이름을 지정하고 제외할 각 열에 대해 @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. 게시 데이터베이스의 게시자에서 sp_articleview를 실행합니다.At the Publisher on the publication database, execute sp_articleview. @publication에 게시 이름을, @article에 필터링된 아티클의 이름을 지정합니다.Specify the publication name for @publication and the name of the filtered article for @article. 이렇게 하면 필터링된 아티클에 대한 동기화 개체가 만들어집니다.This creates the synchronization objects for the filtered article.

스냅숏 또는 트랜잭션 게시에 게시된 아티클에 대한 추가 열을 포함하도록 열 필터를 변경하려면To change a column filter to include additional columns for an article published in a snapshot or transactional publication

  1. 게시 데이터베이스의 게시자에서 추가할 각 열에 대해 sp_articlecolumn 을 한 번씩 실행합니다.At the Publisher on the publication database, execute sp_articlecolumn once for each column being added. @column에 열 이름을, @operationadd 값을 지정합니다.Specify the column name for @column and a value of add for @operation.

  2. 게시 데이터베이스의 게시자에서 sp_articleview를 실행합니다.At the Publisher on the publication database, execute sp_articleview. @publication에 게시 이름을, @article에 필터링된 아티클의 이름을 지정합니다.Specify the publication name for @publication and the name of the filtered article for @article. 게시에 기존 구독이 있는 경우 @change_active 에 대한 @change_active에서 열 필터를 정의하고 수정하는 방법에 대해 설명합니다.If the publication has existing subscriptions, specify a value of 1 for @change_active. 이렇게 하면 필터링된 아티클에 대한 동기화 개체가 다시 만들어집니다.This re-creates the synchronization objects for the filtered article.

  3. 게시에 대해 스냅숏 에이전트 작업을 다시 실행하여 업데이트된 스냅숏을 생성합니다.Rerun the Snapshot Agent job for the publication to generate an updated snapshot.

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

스냅숏 또는 트랜잭션 게시에 게시된 아티클에 대한 열을 제거하도록 열 필터를 변경하려면To change a column filter to remove columns for an article published in a snapshot or transactional publication

  1. 게시 데이터베이스의 게시자에서 제거할 각 열에 대해 sp_articlecolumn 을 한 번씩 실행합니다.At the Publisher on the publication database, execute sp_articlecolumn once for each column being removed. @column에 열 이름을, @operationdrop 값을 지정합니다.Specify the column name for @column and a value of drop for @operation.

  2. 게시 데이터베이스의 게시자에서 sp_articleview를 실행합니다.At the Publisher on the publication database, execute sp_articleview. @publication에 게시 이름을, @article에 필터링된 아티클의 이름을 지정합니다.Specify the publication name for @publication and the name of the filtered article for @article. 게시에 기존 구독이 있는 경우 @change_active 에 대한 @change_active에서 열 필터를 정의하고 수정하는 방법에 대해 설명합니다.If the publication has existing subscriptions, specify a value of 1 for @change_active. 이렇게 하면 필터링된 아티클에 대한 동기화 개체가 다시 만들어집니다.This re-creates the synchronization objects for the filtered article.

  3. 게시에 대해 스냅숏 에이전트 작업을 다시 실행하여 업데이트된 스냅숏을 생성합니다.Rerun the Snapshot Agent job for the publication to generate an updated snapshot.

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

병합 게시에 게시된 아티클에 대한 열 필터를 정의하려면To define a column filter for an article published in a merge publication

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

  2. 게시 데이터베이스의 게시자에서 sp_mergearticlecolumn을 실행합니다.At the Publisher on the publication database, execute sp_mergearticlecolumn. 이렇게 하면 아티클에 포함할 열 또는 아티클에서 제거할 열이 정의됩니다.This defines the columns to include or remove from the article.

    • 많은 열을 포함한 테이블에서 몇 개의 열만 게시하는 경우 추가할 각 열에서 sp_mergearticlecolumn 을 한 번씩 실행합니다.If publishing only a few columns from a table with many columns, execute sp_mergearticlecolumn once for each column being added. @column에 열 이름을, @operationadd 값을 지정합니다.Specify the column name for @column and a value of add for @operation.

    • 많은 열을 포함한 테이블에서 대부분의 열을 게시하는 경우 sp_mergearticlecolumnnull 에 대한 @column 에 대한 열 이름 및 @operation 에 대한 @operation 을 실행하여 모든 열을 추가합니다.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. 그런 다음 sp_mergearticlecolumndrop 에 대한 @operation 에 제외되는 열 이름을 지정하고 제외할 각 열에 대해 @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.

병합 게시에 게시된 아티클에 대한 추가 열을 포함하도록 열 필터를 변경하려면To change a column filter to include additional columns for an article published in a merge publication

  1. 게시 데이터베이스의 게시자에서 추가할 각 열에 대해 sp_mergearticlecolumn 을 한 번씩 실행합니다.At the Publisher on the publication database, execute sp_mergearticlecolumn once for each column being added. @column에 열 이름을, @operationadd 값을, @force_invalidate_snapshot@force_reinit_subscription 둘 다에 1 값을 지정합니다.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. 게시에 대해 스냅숏 에이전트 작업을 다시 실행하여 업데이트된 스냅숏을 생성합니다.Rerun the Snapshot Agent job for the publication to generate an updated snapshot.

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

병합 게시에 게시된 아티클에 대한 열을 제거하도록 열 필터를 변경하려면To change a column filter to remove columns for an article published in a merge publication

  1. 게시 데이터베이스의 게시자에서 제거할 각 열에 대해 sp_mergearticlecolumn 을 한 번씩 실행합니다.At the Publisher on the publication database, execute sp_mergearticlecolumn once for each column being removed. @column에 열 이름을, @operationdrop 값을, @force_invalidate_snapshot@force_reinit_subscription 둘 다에 1 값을 지정합니다.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. 게시에 대해 스냅숏 에이전트 작업을 다시 실행하여 업데이트된 스냅숏을 생성합니다.Rerun the Snapshot Agent job for the publication to generate an updated snapshot.

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

예(Transact-SQL) Example (Transact-SQL)

이 트랜잭션 복제 예제에서는 DaysToManufacture 테이블에 기반한 아티클에서 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

이 병합 복제 예제에서는 CreditCardApprovalCode 테이블에 기반한 아티클에서 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

관련 항목:See Also

게시 및 아티클 속성 변경 Change Publication and Article Properties
게시된 데이터 필터링 Filter Published Data
병합 복제의 게시된 데이터 필터링 Filter Published Data for Merge Replication