$PARTITION (Transact-SQL)
適用於:SQL Server
Azure SQL 資料庫
Azure 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
。
為資料分割函式建立資料分割配置,
RangePS1
RangePF1
。CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GO
在
RangePS1
數據分割配置上建立數據表dbo.PartitionTable
,col1
做為分割數據行。CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GO
將四個數據列插入
dbo.PartitionTable
數據表中。 這些數據列會根據資料分割函數RangePF1
定義插入分割區:1
和10
移至分割區1
,而500
和1000
移至3
。INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GO
查詢
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 |
另一個資料列 |