sql >> Base de Datos >  >> RDS >> Sqlserver

Averigüe a qué partición se asignaría un valor dado en SQL Server (T-SQL)

Si tiene una tabla o un índice particionado en SQL Server y desea determinar a qué partición se asignaría un valor dado, puede hacerlo de manera agradable y rápida con $PARTITION función del sistema.

Todo lo que necesita saber es el nombre de la función de partición (y, por supuesto, el valor que le interesa).

Ejemplo

Aquí hay un ejemplo para demostrarlo.

SELECT $PARTITION.MoviesPartitionFunction(5);

Resultado:

+--------------------+
| (No column name)   |
|--------------------|
| 2                  |
+--------------------+

En este caso, el valor 5 iría a la partición número 2.

Probemos con otros valores.

SELECT 
    $PARTITION.MoviesPartitionFunction(-100) AS [-100],
    $PARTITION.MoviesPartitionFunction(100) AS [100],
    $PARTITION.MoviesPartitionFunction(1000) AS [1000],
    $PARTITION.MoviesPartitionFunction(100000) AS [100000];

Resultado:

+--------+-------+--------+----------+
| -100   | 100   | 1000   | 100000   |
|--------+-------+--------+----------|
| 1      | 2     | 3      | 4        |
+--------+-------+--------+----------+

Consultas entre bases de datos

También puede anteponer el nombre de la base de datos para consultar una base de datos diferente.

SELECT MovieDb.$PARTITION.MoviesPartitionFunction(5);

Conversión de tipos de datos

El tipo de datos del valor que proporcione debe coincidir o ser implícitamente convertible al tipo de datos de su columna de partición correspondiente.

De lo contrario, probablemente reciba el error 245.

SELECT $PARTITION.MoviesPartitionFunction('Hey!');

Resultado:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'Hey!' to data type int.

Tenga en cuenta que $PARTITION devuelve el número de partición para cualquier valor válido, independientemente de si el valor existe actualmente en una tabla o índice particionado que usa la función de partición.