共用方式為


$PARTITION (Transact-SQL)

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

傳回一組資料分割資料行值會針對任何指定的資料分割函數,而對應至的資料分割編號。

Transact-SQL 語法慣例

語法

[ database_name. ] $PARTITION.partition_function_name(expression)  

引數

database_name
這是包含資料分割函數的資料庫名稱。

partition_function_name
這是要套用一組資料分割資料行值的任何現有資料分割函數的名稱。

expression
為資料類型必須完全符合或可隱含轉換成對應分割資料行之資料類型的運算式expression 也可以是目前參與 partition_function_name 之分割資料行的名稱。

傳回類型

int

備註

$PARTITION 會傳回一個 1 和資料分割函式的分割區數目之間的 int 值。

$PARTITION 會傳回任何有效值的資料分割編號,不論使用資料分割函數的資料分割資料表或索引中目前的值為何,都是如此。

範例

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

此範例使用 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
  • RangePS1 資料分割配置上,使用 col1 建立資料表 dbo.PartitionTable 作為分割資料行。
  • 將四個資料列 dbo.PartitionTable 插入資料表中。 根據資料分割函數定義,這些資料列會插入分割區 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 查詢應該會傳回下列結果:

資料分割 COUNT
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 第四個資料列

下一步

深入了解這些文章中的資料表分割: