다음을 통해 공유


$PARTITION(Transact-SQL)

적용 대상:SQL ServerAzure SQL 데이터베이스Azure SQL Managed Instance

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

Transact-SQL 구문 표기 규칙

구문

[ database_name. ] $PARTITION.partition_function_name(expression)

인수

database_name

파티션 함수를 포함하는 데이터베이스의 이름입니다.

partition_function_name

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

expression

데이터 형식이 해당 분할 열의 데이터 형식과 일치하거나 암시적으로 변환될 수 있어야 하는 . 이 매개 변수는 현재 partition_function_name참여하는 분할 열의 이름일 수도 있습니다.

반환 형식

int

설명

$PARTITION 파티션 함수의 파티션 수와 1 사이의 int 값을 반환합니다.

$PARTITION 파티션 함수를 사용하는 분할된 테이블 또는 인덱스에 현재 값이 있는지 여부에 관계없이 유효한 값에 대한 파티션 번호를 반환합니다.

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

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

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

SELECT $PARTITION.RangePF1 (10);
GO

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

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

참고

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

  1. 파티션 함수 RangePF1대한 파티션 구성표(RangePS1)를 만듭니다.

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. col1 분할 열로 사용하여 RangePS1 파티션 구성표에 테이블(dbo.PartitionTable)을 만듭니다.

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. dbo.PartitionTable 테이블에 4개의 행을 삽입합니다. 이러한 행은 파티션 함수 RangePF1 정의에 따라 파티션에 삽입됩니다. 110 파티션 1이동하고 50010003이동합니다.

    INSERT dbo.PartitionTable (col1, col2)
    VALUES (1, 'a row'),
        (10, 'another row'),
        (500, 'another row'),
        (1000, 'another row');
    GO
    
  4. dbo.PartitionTable 쿼리하고 GROUP BY 절의 $PARTITION.RangePF1(col1) 사용하여 데이터를 포함하는 각 파티션의 행 수를 쿼리합니다.

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

결과 집합은 다음과 같습니다.

파티션 개수
1 2
3 2

행은 존재하지만 데이터가 포함되지 않은 파티션 번호 2대해 반환되지 않습니다.

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

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

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

결과 집합은 다음과 같습니다.

col1 col2
500 다른 행
1000 다른 행