열 필터 정의 및 수정

적용 대상:SQL ServerAzure SQL Managed Instance

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

항목 내용

시작하기 전에

제한 사항

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

SQL Server Management Studio 사용

새 게시 마법사의 아티클 페이지에서 열 필터를 정의합니다. 새 게시 마법사를 사용하는 방법에 대한 자세한 내용은 게시 만들기를 참조하세요.

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

열 필터를 정의하려면

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

  2. 필터링하려는 각 열 옆에 있는 검사 상자의 선택 취소

열 필터링을 수정하려면

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

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

  3. 확인을 선택합니다.

Transact-SQL 사용

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

참고 항목

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

예제(Transact-SQL)

이 트랜잭션 복제본(replica) 예제에서는 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

이 병합 복제본(replica)tion 예제 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

참고 항목

게시 및 아티클 속성 변경
게시된 데이터 필터링
병합 복제의 게시된 데이터 필터링