共用方式為


$PARTITION (Transact-SQL)

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體

傳回數據分割編號,其中一組數據分割數據行值可以對應至任何指定的數據分割函數。

Transact-SQL 語法慣例

語法

[ database_name. ] $PARTITION.partition_function_name(expression)

引數

database_name

包含數據分割函數的資料庫名稱。

partition_function_name

套用一組數據分割數據行值的任何現有數據分割函式名稱。

expression

表示式 其數據類型必須符合或隱含轉換成其對應數據分割數據行的數據類型。 這個參數也可以是目前參與 partition_function_name的數據分割數據行名稱。

傳回類型

int

備註

$PARTITION 會傳回 1 與數據分割函式分割數目之間的 int 值。

$PARTITION 傳回任何有效值的分割區編號,不論值目前是否存在於使用數據分割函數的數據分割數據表或索引中。

範例

A. 取得一組分割資料行值的分割區編號

此範例使用 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

  1. 為資料分割函式建立資料分割配置,RangePS1RangePF1

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. RangePS1 數據分割配置上建立數據表 dbo.PartitionTablecol1 做為分割數據行。

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. 將四個數據列插入 dbo.PartitionTable 數據表中。 這些數據列會根據資料分割函數 RangePF1 定義插入分割區:110 移至分割區 1,而 5001000 移至 3

    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
    

以下是結果集。

資料分割 COUNT
1 2
3 2

數據分割編號 2不會傳回數據列,但不包含數據。

C. 從資料分割資料表或索引的某個分割區中傳回所有資料列

下列範例會傳回資料表 PartitionTable 之第 3 個分割區的所有資料列。

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

以下是結果集。

col1 col2
500 另一個資料列
1000 另一個資料列