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.