$PARTITION(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

지정된 파티션 함수에 대해 분할 열 값 집합이 매핑되는 파티션 번호를 반환합니다.

Transact-SQL 구문 표기 규칙

Syntax

[ database_name. ] $PARTITION.partition_function_name(expression)  

참고 항목

SQL Server 2014(12.x) 및 이전 버전에 대한 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조 하세요.

인수

database_name
파티션 함수가 포함된 데이터베이스의 이름입니다.

partition_function_name
분할 열 값 집합이 적용되는 기존 파티션 함수의 이름입니다.

expression
데이터 형식이 해당 분할 열의 데이터 형식과 일치하거나 이 데이터 형식으로의 암시적 변환이 가능해야 하는 입니다. 은 현재 partition_function_name에 참여하는 분할 열의 이름일 수도 있습니다.

반환 형식

int

설명

$PARTITION은 1과 파티션 함수의 파티션 개수 사이에 속하는 int 값을 반환합니다.

$PARTITION은 값이 현재 파티션 함수를 사용하는 분할된 테이블이나 인덱스에 있는지에 관계없이 올바른 값의 파티션 번호를 반환합니다.

A. 분할 열 값 집합에 대한 파티션 번호 가져오기

이 예에서는 테이블이나 인덱스를 4개의 파티션으로 분할하는 RANGE LEFT를 사용하는 파티션 함수 RangePF1을 만듭니다. $PARTITION은 10의 분할 열을 나타내는 RangePF1 값이 테이블의 파티션 1에 포함되는지 확인하는 데 사용됩니다.

CREATE PARTITION FUNCTION RangePF1 ( INT )  
AS RANGE LEFT FOR VALUES (10, 100, 1000) ;  
GO

SELECT $PARTITION.RangePF1 (10) ;  
GO  

B. 분할된 테이블이나 인덱스의 비어 있지 않은 각 파티션에 있는 행 수 가져오기

이 예제에서는 $PARTITION을 사용하여 데이터를 포함하는 테이블의 각 파티션에 있는 행 수를 반환하는 방법을 보여 줍니다.

예:

  • 파티션 함수 RangePF1에 대한 파티션 구성표인 RangePS1을 만듭니다.
  • col1을 분할 열으로 하여 RangePS1 파티션 구성표에서 dbo.PartitionTable 테이블을 만듭니다.
  • dbo.PartitionTable 테이블에 행 4개를 삽입합니다. 파티션 함수 정의에 따라 이러한 행은 파티션 2와 3에 삽입됩니다. 파티션 1과 4는 계속 비어 있습니다.
  • GROUP BY 절에서 dbo.PartitionTable을 쿼리하고 $PARTITION.RangePF1(col1)을 사용하여, 데이터가 포함된 각 파티션의 행 수를 쿼리합니다.

참고

이 예제를 실행하려면 먼저 이전 예제의 코드를 사용하여 파티션 함수 RangePF1을 만들어야 합니다.

CREATE PARTITION SCHEME RangePS1  
    AS PARTITION RangePF1  
    ALL TO ('PRIMARY') ;  
GO  

CREATE TABLE dbo.PartitionTable (col1 int PRIMARY KEY, col2 char(10))  
    ON RangePS1 (col1) ;  
GO

INSERT dbo.PartitionTable (col1, col2)
VALUES ((1,'a row'),(100,'another row'),(500,'another row'),(1000,'another row'))


SELECT 
	$PARTITION.RangePF1(col1) AS Partition,   
	COUNT(*) AS [COUNT] 
FROM dbo.PartitionTable
GROUP BY $PARTITION.RangePF1(col1)  
ORDER BY Partition ;  
GO  

SELECT 쿼리는 다음 결과를 반환해야 합니다.

파티션 개수
2 1
3 3

존재하지만 데이터를 포함하지는 않는 파티션 1과 4에는 행이 반환되지 않습니다.

C. 분할된 테이블이나 인덱스의 특정 파티션에서 모든 행 반환

다음 예에서는 PartitionTable 테이블의 파티션 3에 있는 모든 행을 반환합니다.

SELECT col1, col2
FROM dbo.PartitionTable
WHERE $PARTITION.RangePF1(col1) = 3 ;  

쿼리는 다음 결과를 반환해야 합니다.

col1 col2
101 다른 행
500 세 번째 행
501 네 번째 행

다음 단계

다음 문서에서 테이블 분할에 대해 자세히 알아보세요.