$PARTITION (Transact-SQL)
Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Devuelve el número de partición en el que se puede asignar un conjunto de valores de columna de partición para cualquier función de partición especificada.
Convenciones de sintaxis de Transact-SQL
Sintaxis
[ database_name. ] $PARTITION.partition_function_name(expression)
Argumentos
database_name
Nombre de la base de datos que contiene la función de partición.
partition_function_name
Nombre de cualquier función de partición existente con la que se aplica un conjunto de valores de columna de partición.
expression
Una expresión cuyo tipo de datos debe coincidir o convertirse implícitamente en el tipo de datos de su columna de partición correspondiente. Este parámetro también puede ser el nombre de una columna de creación de particiones que participa actualmente en partition_function_name.
Tipos de valores devueltos
int
Observaciones
$PARTITION
devuelve un valor de int entre 1
y el número de particiones de la función de partición.
$PARTITION
devuelve el número de partición de cualquier valor válido, independientemente de si el valor existe actualmente en una tabla o índice con particiones que usa la función de partición.
Ejemplos
A. Obtención del número de partición de un conjunto de valores de columnas de partición
En este ejemplo se crea una función de partición RangePF1
mediante RANGE LEFT que realizará cuatro particiones en una tabla o un índice.
$PARTITION
se usa para determinar que el valor 10
, que representa la columna de partición de RangePF1
, se colocaría en la partición 1
de la tabla.
CREATE PARTITION FUNCTION RangePF1(INT)
AS RANGE LEFT
FOR VALUES (10, 100, 1000);
GO
SELECT $PARTITION.RangePF1 (10);
GO
B. Obtención del número de filas de cada partición no vacía de una tabla o un índice con particiones
En este ejemplo se muestra cómo usar $PARTITION
para devolver el número de filas de cada partición de la tabla que contiene datos.
Nota
Para ejecutar este ejemplo, primero debe crear la función de partición RangePF1
con el código del ejemplo anterior.
Cree un esquema de partición,
RangePS1
, para la función de particiónRangePF1
.CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GO
Cree una tabla,
dbo.PartitionTable
, en el esquema de particiónRangePS1
concol1
como columna de creación de particiones.CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GO
Inserte cuatro filas en la tabla
dbo.PartitionTable
. Estas filas se insertan en particiones basadas en la definición de la función de particiónRangePF1
:1
y10
van a la partición1
, mientras que500
y1000
van a3
.INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GO
Consulte el
dbo.PartitionTable
y use$PARTITION.RangePF1(col1)
en la cláusulaGROUP BY
para consultar el número de filas de cada partición que contiene datos.SELECT $PARTITION.RangePF1 (col1) AS Partition, COUNT(*) AS [COUNT] FROM dbo.PartitionTable GROUP BY $PARTITION.RangePF1 (col1) ORDER BY Partition; GO
Este es el conjunto de resultados.
Partition | COUNT |
---|---|
1 | 2 |
3 | 2 |
Las filas no se devuelven para el número de partición 2
, que existe, pero no contiene datos.
C. Devolución de todas las filas de una partición de una tabla o un índice con particiones
En el siguiente ejemplo se devuelven todas las filas que se encuentran en la partición 3 de la tabla PartitionTable
.
SELECT col1, col2
FROM dbo.PartitionTable
WHERE $PARTITION.RangePF1 (col1) = 3;
Este es el conjunto de resultados.
col1 | col2 |
---|---|
500 |
otra fila |
1000 |
otra fila |