Compartir a través de


$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.

  1. Cree un esquema de partición, RangePS1, para la función de partición RangePF1.

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. Cree una tabla, dbo.PartitionTable, en el esquema de partición RangePS1 con col1 como columna de creación de particiones.

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. 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ón RangePF1: 1 y 10 van a la partición 1, mientras que 500 y 1000 van a 3.

    INSERT dbo.PartitionTable (col1, col2)
    VALUES (1, 'a row'),
        (10, 'another row'),
        (500, 'another row'),
        (1000, 'another row');
    GO
    
  4. Consulte el dbo.PartitionTable y use $PARTITION.RangePF1(col1) en la cláusula GROUP 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