Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Descubra para qual partição um determinado valor seria mapeado no SQL Server (T-SQL)


Se você tem uma tabela ou índice particionado no SQL Server e deseja determinar para qual partição um determinado valor seria mapeado, você pode fazer isso rapidamente com o $PARTITION função do sistema.

Tudo o que você precisa saber é o nome da função de partição (e, claro, o valor em que você está interessado).

Exemplo


Aqui está um exemplo para demonstrar.
SELECT $PARTITION.MoviesPartitionFunction(5);

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

Neste caso, o valor 5 iria para a partição número 2.

Vamos tentar alguns outros 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 bancos de dados


Você também pode prefixar o nome do banco de dados para consultar um banco de dados diferente.
SELECT MovieDb.$PARTITION.MoviesPartitionFunction(5);

Conversão de tipo de dados


O tipo de dados do valor fornecido deve corresponder ou ser implicitamente conversível para o tipo de dados de sua coluna de particionamento correspondente.

Caso contrário, você provavelmente receberá o erro 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.

Observe que $PARTITION retorna o número da partição para qualquer valor válido, independentemente de o valor existir atualmente em uma tabela ou índice particionado que usa a função de partição.