sp_addmergefilter(Transact-SQL)

적용 대상:SQL ServerAzure SQL Managed Instance

새 병합 필터를 추가하여 다른 테이블과의 조인을 기반으로 파티션을 만듭니다. 이 저장 프로시저는 게시 데이터베이스의 게시자에서 실행됩니다.

Transact-SQL 구문 표기 규칙

구문

sp_addmergefilter
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    , [ @filtername = ] N'filtername'
    , [ @join_articlename = ] N'join_articlename'
    , [ @join_filterclause = ] N'join_filterclause'
    [ , [ @join_unique_key = ] join_unique_key ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @filter_type = ] filter_type ]
[ ; ]

인수

[ @publication = ] N'publication'

병합 필터를 추가할 게시의 이름입니다. @publication 기본값이 없는 sysname입니다.

[ @article = ] N'article'

병합 필터를 추가할 아티클의 이름입니다. @article 기본값이 없는 sysname입니다.

[ @filtername = ] N'filtername'

필터의 이름입니다. @filtername 필수 매개 변수입니다. @filtername sysname이며 기본값은 없습니다.

[ @join_articlename = ] N'join_articlename'

병합 필터의 필터 조건을 충족하는 자식 아티클의 행을 확인하려면 @article 의해 지정된 자식 아티클이 @join_filterclause 지정된 조인 절을 사용하여 조인되어야 하는 부모 아티클입니다. @join_articlename sysname이며 기본값은 없습니다. 아티클은 @publication 제공된 발행물에 있어야 합니다.

[ @join_filterclause = ] N'join_filterclause'

병합 필터를 한정하는 행을 확인하려면 @article 및 @join_article 지정한 부모 아티클에 지정된 자식 아티클에 조인하는 데 사용해야 하는 조인 절입니다. @join_filterclause 기본값이 없는 nvarchar(1000)입니다.

[ @join_unique_key = ] join_unique_key

자식 아티클 @article 부모 아티클 @join_article 간의 조인이 일대다, 일 대 일, 다 대 일 또는 다 대 다인지를 지정합니다. @join_unique_key 기본값0int입니다.

  • 0 는 다대일 또는 다대다 조인을 나타냅니다.

  • 1 는 일대일 또는 일대다 조인을 나타냅니다.

이 값은 조인 열이 1 @join_article 고유 키를 형성하거나 @join_filterclause @article 외래 키와 @join_article 기본 키 사이에 있는 경우입니다.

주의

고유성을 보장하는 부모 아티클에 대한 기본 테이블의 조인 열에 제약 조건이 있는 경우에만 이 매개 변수 1 를 설정합니다. @join_unique_key 잘못 설정된 1 경우 데이터의 비수렴이 발생할 수 있습니다.

[ @force_invalidate_snapshot = ] force_invalidate_스냅샷

이 저장 프로시저에서 수행한 작업이 기존 스냅샷 무효화할 수 있음을 인정합니다. @force_invalidate_스냅샷 비트이며 기본값은 .입니다0.

  • 0는 병합 아티클을 변경해도 스냅샷 유효하지 않도록 지정합니다. 저장 프로시저에서 변경에 새 스냅샷 필요하다는 것을 감지하면 오류가 발생하고 변경되지 않습니다.

  • 1는 병합 아티클을 변경하면 스냅샷 유효하지 않을 수 있으며, 새 스냅샷 필요한 기존 구독이 있는 경우 기존 스냅샷 사용되지 않는 것으로 표시되고 새 스냅샷 생성될 수 있는 권한을 부여합니다.

[ @force_reinit_subscription = ] force_reinit_subscription

이 저장 프로시저에서 수행한 작업에 기존 구독을 다시 초기화해야 할 수 있음을 인정합니다. @force_reinit_subscription 비트이며 기본값은 .입니다0.

  • 0 는 병합 아티클을 변경해도 구독이 다시 초기화되지 않도록 지정합니다. 저장 프로시저에서 변경 내용이 구독을 다시 초기화해야 한다는 것을 감지하면 오류가 발생하고 변경되지 않습니다.

  • 1 는 병합 아티클의 변경으로 인해 기존 구독이 다시 초기화되도록 지정하고 구독 다시 초기화에 대한 권한을 부여합니다.

[ @filter_type = ] filter_type

추가할 필터의 형식을 지정합니다. @filter_type tinyint이며 다음 값 중 하나일 수 있습니다.

설명
1 조인 필터 전용입니다. SQL Server Compact 구독자를 지원하는 데 필요합니다.
2 논리적 레코드 관계만.
3 조인 필터와 논리적 레코드 관계입니다.

자세한 내용은 논리적 레코드를 사용하여 관련된 행의 변경 내용 그룹화를 참조하세요.

반환 코드 값

0 (성공) 또는 1 (실패).

설명

sp_addmergefilter는 병합 복제본(replica)에 사용됩니다.

sp_addmergefilter 는 테이블 아티클에서만 사용할 수 있습니다. 보기 및 인덱싱된 보기 아티클은 지원되지 않습니다.

이 프로시저를 사용하여 둘 사이에 조인 필터가 있거나 없을 수도 있는 두 아티클 간에 논리적 관계를 추가할 수도 있습니다. @filter_type 추가되는 병합 필터가 조인 필터, 논리적 관계 또는 둘 다인지를 지정하는 데 사용됩니다.

논리 레코드를 사용하려면 게시 및 아티클이 몇 가지 요구 사항을 충족해야 합니다. 자세한 내용은 논리적 레코드를 사용하여 관련된 행의 변경 내용 그룹화를 참조하세요.

일반적으로 이 옵션은 게시된 기본 키 테이블에 대한 외래 키 참조인 아티클에 사용되며 기본 키 테이블에는 해당 아티클에 정의된 필터가 있습니다. 구독자로 복제되는 외래 키 행을 결정하기 위해 기본 키 행의 하위 집합이 사용됩니다.

두 아티클의 원본 테이블이 동일한 테이블 개체 이름을 공유하는 경우 게시된 두 아티클 사이에 조인 필터를 추가할 수 없습니다. 이 경우 두 테이블이 서로 다른 스키마에 의해 소유되고 고유한 아티클 이름이 있더라도 조인 필터를 만들지 못합니다.

매개 변수가 있는 행 필터 및 조인 필터 모두를 테이블 아티클에서 사용할 경우 복제에 의해 행이 구독자의 파티션에 속하는지 여부가 결정됩니다. 이렇게 하려면 두 조건(AND 연산자 사용)의 교집합을 평가하는 대신 필터링 함수 또는 조인 필터(OR 연산자 사용)를 평가합니다.

예제

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.EmployeeID = 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

사용 권한

sysadmin 고정 서버 역할 또는 db_owner 고정 데이터베이스 역할의 멤버만 실행할 sp_addmergefilter수 있습니다.