sp_addmergefilter(Transact-SQL)

 

적용 대상: SQL Server

이 항목은 다음에 적용됩니다.예SQL Server(2008부터 시작)아니요Azure SQL 데이터베이스아니요Azure SQL 데이터 웨어하우스아니요병렬 데이터 웨어하우스

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

Topic link icon Transact-SQL 구문 표기 규칙

  
sp_addmergefilter [ @publication = ] 'publication'   
        , [ @article = ] 'article'   
        , [ @filtername = ] 'filtername'   
        , [ @join_articlename = ] 'join_articlename'   
        , [ @join_filterclause = ] 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= ] 'publication'
병합 필터가 추가될 게시의 이름입니다. 게시sysname, 기본값은 없습니다.

[ @article= ] 'article'
병합 필터가 추가될 아티클의 이름입니다. 문서sysname, 기본값은 없습니다.

[ @filtername= ] 'filtername'
필터의 이름입니다. filtername 필수 매개 변수입니다. filternamesysname, 기본값은 없습니다.

[ @join_articlename= ] 'join_articlename'
에 의해 지정 된 자식 아티클과 부모 아티클은 문서, 지정한 조인 절을 사용 하 여 가입 되어 있어야 join_filterclause병합 필터의 필터 조건을 충족 하는 자식 아티클의 행이 결정 하기 위해서입니다. join_articlenamesysname, 기본값은 없습니다. 이 문서에 지정 된 게시에 있어야 합니다. 게시합니다.

[ ** @join_filterclause=** ] join_filterclause
Join 절에서 지정한 자식 아티클을 조인할 사용 해야 하는 문서에서 지정한 부모 아티클을 join_article병합 필터를 한 정하는 행이 결정 하기 위해서입니다. join_filterclausenvarchar (1000)합니다.

[ @join_unique_key= ] join_unique_key
지정 하는 경우 자식 아티클 간의 조인 문서과 부모 아티클인 join_article일 대 다, 한 한 일 대 다 또는 다 대 다. join_unique_keyint, 기본값은 0입니다. 0 다 대 일 또는 다 대 다 조인을 나타냅니다. 1 한 한 일 대 다 조인을 나타냅니다. 이 값은 1 조인 하는 열에 고유 키를 구성 하는 경우 join_article, if 또는 join_filterclause 사이에서 외래 키 문서 에 기본 키 join_article합니다.

System_CAPS_ICON_caution.jpg 주의


이 매개 변수를 설정만 1 는 제약 조건을 조인 열에 고유성을 보장 하는 부모 아티클의 기본 테이블에 있는 경우. 경우 join_unique_key 로 설정 된 1 올바르게 데이터의 일치성 하지 발생할 수 있습니다.

[ ** @force_invalidate_snapshot=** ] force_invalidate_snapshot
으로 인해이 저장된 프로시저가 수행한 동작 기존 스냅숏을 무효화 될 수 있습니다. force_invalidate_snapshot비트, 기본값 0합니다.

0 병합 아티클에 대 한 변경 인해 스냅숏이 무효화 되지 않도록 지정 합니다. 해당 저장 프로시저가 새 스냅숏이 필요한 변경을 검색할 경우, 오류가 발생하여 변경할 수 없습니다.

1 지정 병합 아티클에 대 한 변경 유효 하지 않게 하려면 스냅숏을 무효화 하 고 의미 하며 새 스냅숏이 필요한 기존 구독이 있는 경우 기존 스냅숏을 사용 되지 않는 것으로 표시 해야 하 고 새 스냅숏을 생성할에 대 한 사용 권한을 부여 합니다.

[ ** @force_reinit_subscription=** ] force_reinit_subscription
이 저장 프로시저가 수행한 동작으로 인해 기존 구독을 다시 초기화해야 할 수도 있습니다. force_reinit_subscription비트, 기본값은 0입니다.

0 병합 아티클에 대 한 변경 인해 구독이 다시 초기화 되지 않도록 지정 합니다. 해당 저장 프로시저가 구독을 다시 초기화해야 하는 변경을 검색할 경우, 오류가 발생하여 변경할 수 없습니다.

1 아티클의 병합 아티클에 대 한 변경 것을 기존 구독을 다시 초기화 해야 할 구독을 다시 초기화할 수 있는 권한을 부여 합니다.

[ @filter_type= ] filter_type
추가할 필터 유형을 지정합니다. filter_typetinyint, 다음 값 중 하나일 수 있습니다.

ValueDescription
1조인 필터 전용입니다. 이 기능은 SQL Server Compact 구독자를 지원하는 데 필요합니다.
2논리적 레코드 관계 전용입니다.
3조인 필터 및 논리적 레코드 관계 모두를 사용할 수 있습니다.

자세한 내용은 참조 그룹 변경 내용을 논리적 레코드와 관련 된 행에합니다.

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

sp_addmergefilter 병합 복제에 사용 됩니다.

sp_addmergefilter 테이블 아티클로 사용할 수 있습니다. 뷰 및 인덱싱된 뷰 아티클은 지원되지 않습니다.

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

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

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

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

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

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합니다.

아티클 정의
병합 아티클 간의 조인 필터 정의 및 수정
조인 필터
sp_changemergefilter (TRANSACT-SQL)
sp_dropmergefilter (TRANSACT-SQL)
sp_helpmergefilter (TRANSACT-SQL)
복제 저장 프로시저 (TRANSACT-SQL)

커뮤니티 추가 항목

추가
표시: