적용 대상: SQL Server
Azure SQL Managed Instance
새 병합 필터를 추가하여 다른 테이블과의 조인을 기반으로 파티션을 만듭니다. 이 저장 프로시저는 게시 데이터베이스의 게시자에서 실행됩니다.
구문
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 기본값0인 int입니다.
0는 다대일 또는 다대다 조인을 나타냅니다.1는 일대일 또는 일대다 조인을 나타냅니다.
이 값은 조인 열이 1 @join_article 고유 키를 형성하거나 @join_filterclause @article 외래 키와 @join_article 기본 키 사이에 있는 경우입니다.
주의
고유성을 보장하는 부모 아티클에 대한 기본 테이블의 조인 열에 제약 조건이 있는 경우에만 이 매개 변수 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_type tinyint이며 다음 값 중 하나일 수 있습니다.
| 값 | 설명 |
|---|---|
1 |
조인 필터 전용입니다. SQL Server Compact 구독자를 지원하는 데 필요합니다. |
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수 있습니다.