$PARTITION (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

Devuelve el número de partición al que se asignaría un conjunto de valores de columnas 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
Es el nombre de la base de datos que contiene la función de partición.

partition_function_name
Es el nombre de cualquier función de partición existente con la que se está aplicando un conjunto de valores de columnas de partición.

expression
Es una expression cuyo tipo de datos debe coincidir con el tipo de datos de su columna de partición correspondiente, o debe poder convertirse a dicho tipo de datos de forma implícita. expression también puede ser el nombre de una columna de partición que participa en ese momento en partition_function_name.

Tipos de valores devueltos

int

Observaciones

$PARTITION devuelve un valor 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 en ese momento en una tabla o índice con particiones que utilice 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 utiliza 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.

El ejemplo:

  • Crea un esquema de partición, RangePS1, para la función de partición RangePF1.
  • Crea una tabla, dbo.PartitionTable, en el esquema de partición RangePS1 con col1 como columna de partición.
  • Inserta cuatro filas en la tabla dbo.PartitionTable. En función de la definición de la función de partición, estas filas se insertarán en las particiones 2 y 3. Las particiones 1 y 4 permanecerán vacías.
  • Consulta dbo.PartitionTable y usa $PARTITION.RangePF1(col1) en la cláusula GROUP BY para consultar el número de filas de cada partición 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.

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  

La consulta SELECT debería devolver los siguientes resultados:

Partition COUNT
2 1
3 3

Las filas no se devuelven para las particiones número 1 y 4, que existen, pero no contienen 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 ;  

La consulta debería devolver los siguientes resultados:

col1 col2
101 otra fila
500 una tercera fila
501 una cuarta fila

Pasos siguientes

Obtenga más información sobre la creación de particiones de tablas en estos artículos: