정적 행 필터 정의 및 수정
적용 대상:SQL ServerAzure SQL Managed Instance
이 항목에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server에서 정적 행 필터를 정의하고 수정하는 방법을 설명합니다.
항목 내용
시작하기 전 주의 사항:
정적 행 필터를 정의하고 수정하려면:
시작하기 전에
제한 사항
게시에 대한 구독이 초기화된 후 정적 행 필터를 추가, 수정 또는 삭제한 경우에는 변경 내용을 적용한 후에 새 스냅샷을 생성하고 모든 구독을 다시 초기화해야 합니다. 속성 변경 요구 사항에 대한 자세한 내용은 게시 및 아티클 속성 변경을 참조 하세요.
게시에서 피어 투 피어 트랜잭션 복제를 사용할 수 있도록 설정한 경우에는 테이블을 필터링할 수 없습니다.
권장 사항
- 이러한 필터는 정적이므로 모든 구독자는 동일한 데이터 하위 집합을 받습니다. 각 구독자가 다른 데이터 파티션을 받도록 병합 게시에 속하는 테이블 아티클의 행을 동적으로 필터링해야 하는 경우 병합 아티클에 대한 매개 변수가 있는 행 필터 정의 및 수정을 참조하세요. 병합 복제본(replica)tion을 사용하면 기존 행 필터를 기반으로 관련 행을 필터링할 수도 있습니다. 자세한 내용은 병합 아티클 간의 조인 필터 정의 및 수정을 참조 하세요.
SQL Server Management Studio 사용
새 게시 마법사의 테이블 행 필터 페이지 또는 게시 속성 - <게시> 대화 상자의 행 필터 페이지에서 정적 행 필터를 정의, 수정 및 삭제합니다. 마법사 사용 및 대화 상자 액세스에 대한 자세한 내용은 게시 만들기 및 게시 속성 보기 및 수정을 참조하세요.
정적 행 필터를 정의하려면
새 게시 마법사의 테이블 행 필터 페이지 또는 게시 속성 - <게시> 대화 상자의 행 필터 페이지에서 수행하는 작업은 게시 유형에 따라 달라집니다.
스냅샷 또는 트랜잭션 게시의 경우 추가를 클릭합니다.
병합 게시의 경우 추가를 클릭한 다음 필터 추가를 클릭합니다.
필터 추가 대화 상자의 드롭다운 목록 상자에서 필터링할 테이블을 선택합니다.
필터 문 텍스트 영역에서 필터 문을 만듭니다. 텍스트 영역에 직접 입력할 수 있으며 열 목록 상자에서 열을 끌어서 놓을 수도 있습니다.
참고 항목
WHERE 절은 두 부분으로 된 명명을 사용해야 합니다. 3부로 구성된 명명 및 4부로 구성된 명명은 지원되지 않습니다. 게시가 Oracle 게시자에서 온 경우 WHERE 절은 Oracle 구문을 준수해야 합니다.
필터 문 텍스트 영역에는 다음 형식의 기본 텍스트가 포함됩니다.
SELECT <published_columns> FROM [schema].[tablename] WHERE
기본 텍스트는 변경할 수 없습니다. 표준 SQL 구문을 사용하여 WHERE 키워드(keyword) 뒤의 필터 절을 입력합니다. 전체 필터 절은 다음과 같이 표시됩니다.
SELECT <published_columns> FROM [HumanResources].[Employee] WHERE [LoginID] = 'adventure-works\ranjit0'
정적 행 필터는 사용자 정의 함수를 포함할 수 있습니다. 사용자 정의 함수가 있는 정적 행 필터에 대한 전체 필터 절은 다음과 같습니다.
SELECT <published_columns> FROM [Sales].[SalesOrderHeader] WHERE MyFunction([Freight]) > 100
확인을 선택합니다.
게시 속성 - <게시> 대화 상자에 있는 경우 [확인]을 클릭하여 대화 상자를 저장하고 닫습니다.
정적 행 필터를 수정하려면
새 게시 마법사의 테이블 행 필터 페이지 또는 게시 속성 - <게시> 대화 상자의 행 필터 페이지에서 필터링된 테이블 창에서 필터를 선택한 다음 편집을 클릭합니다.
필터 편집 대화 상자에서 필터를 수정합니다.
확인을 선택합니다.
정적 행 필터를 삭제하려면
- 새 게시 마법사의 테이블 행 필터 페이지 또는 게시 속성 - <게시> 대화 상자의 행 필터 페이지에서 필터링된 테이블 창에서 필터를 선택한 다음 삭제를 클릭합니다.
Transact-SQL 사용
테이블 아티클을 만들 때 아티클에서 행을 필터링하는 WHERE 절을 정의할 수 있습니다. 행 필터가 정의되면 변경할 수도 있습니다. 정적 행 필터는 복제본(replica)tion 저장 프로시저를 사용하여 프로그래밍 방식으로 만들고 수정할 수 있습니다.
스냅샷 또는 트랜잭션 게시에 대한 정적 행 필터를 정의하려면
필터링할 아티클을 정의합니다. 자세한 내용은 아티클 정의를 참조 하세요.
게시 데이터베이스의 게시자에서 sp_articlefilter(Transact-SQL)를 실행합니다. 이때 @article에 아티클 이름, @publication에 게시 이름, @filter_name에 필터 이름, @filter_clause 에 필터링 절(
WHERE
포함하지 않음)을 지정합니다.열 필터를 계속 정의해야 하는 경우 열 필터 정의 및 수정을 참조하세요. 그렇지 않으면 sp_articleview(Transact-SQL)를 실행 합니다. 이때 @publication에 게시 이름, @article에 필터링된 아티클 이름, @filter_clause에 2단계에서 지정한 필터 절을 지정합니다. 이렇게 하면 필터링된 아티클에 대한 동기화 개체가 만들어집니다.
스냅샷 또는 트랜잭션 게시에 대한 정적 행 필터를 수정하려면
게시 데이터베이스의 게시자에서 sp_articlefilter(Transact-SQL)를 실행합니다. @article 아티클 이름, @publication 게시 이름, @filter_name 새 필터의 이름 및 @filter_clause 대한 새 필터링 절(포함
WHERE
안 됨)을 지정합니다. 이 변경으로 인해 기존 구독의 데이터가 무효화되므로 @force_reinit_subscription 값을 1로 지정합니다.게시 데이터베이스의 게시자에서 sp_articleview(Transact-SQL)를 실행합니다. @publication 게시 이름, @article 필터링된 아티클의 이름 및 @filter_clause 1단계에서 지정한 필터 절을 지정합니다. 그러면 필터링된 아티클을 정의하는 뷰가 다시 만들어집니다.
게시에 대한 스냅샷 에이전트 작업을 다시 실행하여 업데이트된 스냅샷 생성합니다. 자세한 내용은 초기 스냅샷 만들기 및 적용을 참조하세요.
구독을 다시 초기화합니다. 자세한 내용은 구독 다시 초기화를 참조하세요.
스냅샷 또는 트랜잭션 게시에 대한 정적 행 필터를 삭제하려면
게시 데이터베이스의 게시자에서 sp_articlefilter(Transact-SQL)를 실행합니다. @article 아티클 이름, @publication 발행물 이름, @filter_name NULL 값, @filter_clause NULL 값을 지정합니다. 이 변경으로 인해 기존 구독의 데이터가 무효화되므로 @force_reinit_subscription 값을 1로 지정합니다.
게시에 대한 스냅샷 에이전트 작업을 다시 실행하여 업데이트된 스냅샷 생성합니다. 자세한 내용은 초기 스냅샷 만들기 및 적용을 참조하세요.
구독을 다시 초기화합니다. 자세한 내용은 구독 다시 초기화를 참조하세요.
병합 게시에 대한 정적 행 필터를 정의하려면
게시 데이터베이스의 게시자에서 sp_addmergearticle(Transact-SQL)를 실행합니다. 이때 @subset_filterclause 에 필터링 절(
WHERE
포함하지 않음)을 지정합니다. 자세한 내용은 아티클 정의를 참조 하세요.열 필터를 계속 정의해야 하는 경우 열 필터 정의 및 수정을 참조하세요.
병합 게시에 대한 정적 행 필터를 수정하려면
게시 데이터베이스의 게시자에서 sp_changemergearticle(Transact-SQL)를 실행합니다. @publication 게시 이름, @article 필터링된 아티클 이름, @property subset_filterclause값 및 @value 대한 새 필터링 절(포함
WHERE
안 됨)을 지정합니다. 이 변경으로 인해 기존 구독의 데이터가 무효화되므로 @force_reinit_subscription 값을 1로 지정합니다.게시에 대한 스냅샷 에이전트 작업을 다시 실행하여 업데이트된 스냅샷 생성합니다. 자세한 내용은 초기 스냅샷 만들기 및 적용을 참조하세요.
구독을 다시 초기화합니다. 자세한 내용은 구독 다시 초기화를 참조하세요.
예제(Transact-SQL)
다음 트랜잭션 복제 예에서는 지원되지 않는 모든 제품을 제거하도록 아티클을 행 필터링합니다.
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 예제에서 아티클은 지정된 영업 사원에 속한 행만 반환하도록 가로로 필터링됩니다. 조인 필터도 사용합니다. 자세한 내용은 병합 아티클 간의 조인 필터 정의 및 수정을 참조 하세요.
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
참고 항목
병합 아티클에 대한 매개 변수가 있는 행 필터 정의 및 수정
게시 및 아티클 속성 변경
게시된 데이터 필터링
병합 복제의 게시된 데이터 필터링
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기