열 필터 정의 및 수정

SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server 2012에서 열 필터를 정의하고 수정하는 방법에 대해 설명합니다.

항목 내용

  • 시작하기 전에:

    제한 사항

  • 다음을 사용하여 열 필터를 정의하고 수정하려면

    SQL Server Management Studio

    Transact-SQL

시작하기 전에

제한 사항

  • 일부 열은 필터링할 수 없습니다. 자세한 내용은 게시된 데이터 필터링을 참조하십시오. 구독을 초기화한 후 열 필터를 수정할 경우 새 스냅숏을 만들고 변경 내용을 적용한 후 모든 구독을 다시 초기화해야 합니다. 속성 변경 요구 사항에 대한 자세한 내용은 게시 및 아티클 속성 변경을 참조하십시오.

맨 위로 이동 링크와 함께 사용되는 화살표 아이콘[Top]

SQL Server Management Studio 사용

새 게시 마법사의 아티클 페이지에서 열 필터를 정의합니다. 새 게시 마법사의 사용 방법은 게시 만들기를 참조하십시오.

게시 속성 - <Publication> 대화 상자의 아티클 페이지에서 열 필터를 정의하고 수정합니다. 게시 및 아티클 속성에 대한 자세한 내용은 게시 속성 보기 및 수정을 참조하십시오.

열 필터를 정의하려면

  1. 새 게시 마법사의 아티클 페이지에 있는 게시할 개체 창에서 필터링할 테이블을 확장합니다.

  2. 필터링할 각 열 옆에 있는 확인란의 선택을 취소합니다.

열 필터링을 수정하려면

  1. 게시 속성 - <Publication> 대화 상자의 아티클 페이지에 있는 게시할 개체 창에서 필터링할 테이블을 확장합니다.

  2. 필터링할 각 열 옆에 있는 확인란의 선택은 취소하고 아티클에 포함시킬 각 열에 대한 확인란은 선택합니다.

  3. 확인을 클릭합니다.  

맨 위로 이동 링크와 함께 사용되는 화살표 아이콘[Top]

Transact-SQL 사용

테이블 아티클을 만들 때 아티클에 포함할 열을 정의할 수 있으며 아티클이 정의된 후 이 열을 변경할 수 있습니다. 복제 저장 프로시저를 사용하여 프로그래밍 방식으로 필터링된 열을 만들고 수정할 수 있습니다.

[!참고]

다음 절차에서는 기본 테이블이 변경되지 않은 것으로 가정합니다. DDL(데이터 정의 언어) 변경 내용을 게시된 테이블에 복제하는 방법은 게시 데이터베이스의 스키마 변경을 참조하십시오.

스냅숏 또는 트랜잭션 게시에 게시된 아티클에 대한 열 필터를 정의하려면

  1. 필터링할 아티클을 정의합니다. 자세한 내용은 아티클 정의를 참조하십시오.

  2. 게시 데이터베이스의 게시자에서 sp_articlecolumn을 실행합니다. 이렇게 하면 아티클에 포함할 열 또는 아티클에서 제거할 열이 정의됩니다.

    • 많은 열을 포함한 테이블에서 몇 개의 열만 게시하는 경우 추가할 각 열에 대해 sp_articlecolumn을 한 번씩 실행합니다. @column에 대한 열 이름 및 @operation에 대한 add 값을 지정합니다.

    • 많은 열을 포함한 테이블에서 대부분의 열을 게시하는 경우 @columnnull 값, @operationadd 값을 지정하고 sp_articlecolumn을 실행하여 모든 열을 추가합니다. 그런 다음 @operationdrop 값, @column에 제외되는 열 이름을 지정하고 제외할 각 열에 대해 sp_articlecolumn을 한 번씩 실행합니다.

  3. 게시 데이터베이스의 게시자에서 sp_articleview를 실행합니다. @publication에 대한 게시 이름 및 @article에 대한 필터링된 아티클의 이름을 지정합니다. 이렇게 하면 필터링된 아티클에 대한 동기화 개체가 만들어집니다.

스냅숏 또는 트랜잭션 게시에 게시된 아티클에 대한 추가 열을 포함하도록 열 필터를 변경하려면

  1. 게시 데이터베이스의 게시자에서 추가할 각 열에 대해 sp_articlecolumn을 한 번씩 실행합니다. @column에 대한 열 이름 및 @operation에 대한 add 값을 지정합니다.

  2. 게시 데이터베이스의 게시자에서 sp_articleview를 실행합니다. @publication에 대한 게시 이름 및 @article에 대한 필터링된 아티클의 이름을 지정합니다. 게시에 기존 구독이 있는 경우 @change_active1 값을 지정합니다. 이렇게 하면 필터링된 아티클에 대한 동기화 개체가 다시 만들어집니다.

  3. 게시에 대해 스냅숏 에이전트 작업을 다시 실행하여 업데이트된 스냅숏을 생성합니다.

  4. 구독을 다시 초기화합니다. 자세한 내용은 구독 다시 초기화를 참조하십시오.

스냅숏 또는 트랜잭션 게시에 게시된 아티클에 대한 열을 제거하도록 열 필터를 변경하려면

  1. 게시 데이터베이스의 게시자에서 제거할 각 열에 대해 sp_articlecolumn을 한 번씩 실행합니다. @column에 열 이름, @operationdrop 값을 지정합니다.

  2. 게시 데이터베이스의 게시자에서 sp_articleview를 실행합니다. @publication에 대한 게시 이름 및 @article에 대한 필터링된 아티클의 이름을 지정합니다. 게시에 기존 구독이 있는 경우 @change_active1 값을 지정합니다. 이렇게 하면 필터링된 아티클에 대한 동기화 개체가 다시 만들어집니다.

  3. 게시에 대해 스냅숏 에이전트 작업을 다시 실행하여 업데이트된 스냅숏을 생성합니다.

  4. 구독을 다시 초기화합니다. 자세한 내용은 구독 다시 초기화를 참조하십시오.

병합 게시에 게시된 아티클에 대한 열 필터를 정의하려면

  1. 필터링할 아티클을 정의합니다. 자세한 내용은 아티클 정의를 참조하십시오.

  2. 게시 데이터베이스의 게시자에서 sp_mergearticlecolumn을 실행합니다. 이렇게 하면 아티클에 포함할 열 또는 아티클에서 제거할 열이 정의됩니다.

    • 많은 열을 포함한 테이블에서 몇 개의 열만 게시하는 경우 추가할 각 열에서 sp_mergearticlecolumn을 한 번씩 실행합니다. @column에 대한 열 이름 및 @operation에 대한 add 값을 지정합니다.

    • 많은 열을 포함한 테이블에서 대부분의 열을 게시하는 경우 @columnnull 값, @operationadd 값을 지정하고 sp_mergearticlecolumn을 실행하여 모든 열을 추가합니다. 그런 다음 @operationdrop 값, @column에 제외할 열 이름을 지정하고 제외할 각 열에 대해 sp_mergearticlecolumn을 한 번씩 실행합니다.

병합 게시에 게시된 아티클에 대한 추가 열을 포함하도록 열 필터를 변경하려면

  1. 게시 데이터베이스의 게시자에서 추가할 각 열에 대해 sp_mergearticlecolumn을 한 번씩 실행합니다. @column에 열 이름, @operationadd 값을 지정하고 @force_invalidate_snapshot@force_reinit_subscription에 모두 1 값을 지정합니다.

  2. 게시에 대해 스냅숏 에이전트 작업을 다시 실행하여 업데이트된 스냅숏을 생성합니다.

  3. 구독을 다시 초기화합니다. 자세한 내용은 구독 다시 초기화를 참조하십시오.

병합 게시에 게시된 아티클에 대한 열을 제거하도록 열 필터를 변경하려면

  1. 게시 데이터베이스의 게시자에서 제거할 각 열에 대해 sp_mergearticlecolumn을 한 번씩 실행합니다. @column에 열 이름, @operationdrop 값을 지정하고 @force_invalidate_snapshot@force_reinit_subscription에 모두 1 값을 지정합니다.

  2. 게시에 대해 스냅숏 에이전트 작업을 다시 실행하여 업데이트된 스냅숏을 생성합니다.

  3. 구독을 다시 초기화합니다. 자세한 내용은 구독 다시 초기화를 참조하십시오.

예(Transact-SQL)

이 트랜잭션 복제 예제에서는 Product 테이블에 기반한 아티클에서 DaysToManufacture 열이 제거되었습니다.

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

이 병합 복제 예제에서는 SalesOrderHeader 테이블에 기반한 아티클에서 CreditCardApprovalCode 열이 제거되었습니다.

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]

참고 항목

개념

게시 및 아티클 속성 변경

게시된 데이터 필터링

병합 복제의 게시된 데이터 필터링