sp_addmergefilter(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'
병합 필터가 추가될 게시의 이름입니다. publication은 sysname이며 기본값은 없습니다.[ @article= ] 'article'
병합 필터가 추가될 아티클의 이름입니다. article은 sysname이며 기본값은 없습니다.[ @filtername= ] 'filtername'
필터의 이름입니다. filtername은 필수 매개 변수입니다. filtername은 sysname이며 기본값은 없습니다.[ @join_articlename= ] 'join_articlename'
join_filterclause에서 지정한 조인 절을 사용하여 article에서 지정한 자식 아티클을 조인할 부모 아티클입니다. join_filterclause 절은 자식 아티클의 행이 병합 필터의 필터 조건에 부합하는지 확인하는 데 사용됩니다. join_articlename은 sysname이며 기본값은 없습니다. 아티클은 반드시 publication에 지정된 게시에 있어야 합니다.[ @join_filterclause= ] join_filterclause
article에서 지정한 자식 아티클과 join_article에서 지정한 부모 아티클을 조인하는 데 사용되는 조인 절로, 행이 병합 필터의 조건에 부합하는지 확인하는 데 사용됩니다. join_filterclause는 **nvarchar(1000)**입니다.[ @join_unique_key= ] join_unique_key
자식 아티클인 article과 부모 아티클인 join_article 간의 조인이 일 대 다, 일 대 일, 다 대 일 또는 다 대 다 중에서 어느 것에 해당되는지 지정합니다. join_unique_key는 int이며 기본값은 0입니다. 0은 다 대 일 또는 다 대 다 조인을 나타냅니다. 1은 일 대 일 또는 일 대 다 조인을 나타냅니다. 이 값은 조인 열이 join_article에서 고유 키를 구성하거나 join_filterclause가 article의 외래 키와 join_article의 기본 키 사이에 있는 경우 1입니다.주의 부모 아티클의 기반 테이블에 있는 조인 열에 고유성을 보장하는 제약 조건이 있는 경우에만 이 매개 변수를 1로 설정하십시오. 그렇지 않은 경우 join_unique_key를 1로 설정하면 데이터가 일치하지 않을 수 있습니다.
[ @force_invalidate_snapshot= ] force_invalidate_snapshot
이 저장 프로시저가 수행한 동작으로 인해 기존 스냅숏이 무효화될 수도 있습니다. force_invalidate_snapshot은 bit이며 기본값은 0입니다.0은 병합 아티클에 대한 변경으로 인해 스냅숏이 무효화되지 않도록 지정합니다. 해당 저장 프로시저가 새 스냅숏이 필요한 변경을 검색할 경우, 오류가 발생하여 변경할 수 없습니다.
1은 병합 아티클 변경으로 스냅숏이 무효화됨을 의미하며 새 스냅숏이 필요한 기존 구독이 있는 경우 기존 스냅숏을 오래되어 사용하지 않음으로 표시하고 새 스냅숏을 생성할 권한을 부여합니다.
[ @force_reinit_subscription= ] force_reinit_subscription
이 저장 프로시저가 수행한 동작으로 인해 기존 구독을 다시 초기화해야 할 수도 있습니다. force_reinit_subscription은 bit이며 기본값은 0입니다.0은 병합 아티클에 대한 변경으로 인해 구독이 다시 초기화되지 않도록 지정합니다. 해당 저장 프로시저가 구독을 다시 초기화해야 하는 변경을 검색할 경우, 오류가 발생하여 변경할 수 없습니다.
1은 병합 아티클의 변경이 기존 구독을 다시 초기화하는 것을 의미하며 구독을 다시 초기화할 수 있는 권한을 부여합니다.
[ @filter_type= ] filter_type
추가할 필터 유형을 지정합니다. filter_type은 tinyint이며 다음 값 중 하나일 수 있습니다.값
설명
1
조인 필터 전용입니다. SQL Server Compact 3.5 SP1 구독자를 지원하는 데 필요합니다.
2
논리적 레코드 관계 전용입니다.
3
조인 필터 및 논리적 레코드 관계 모두를 사용할 수 있습니다.
자세한 내용은 논리적 레코드를 사용하여 관련된 행의 변경 내용을 그룹화를 참조하십시오.
반환 코드 값
0(성공) 또는 1(실패)
주의
sp_addmergefilter는 병합 복제에 사용됩니다.
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를 실행할 수 있습니다.