Hvis du har en partitioneret tabel eller et indeks i SQL Server, og du ønsker at bestemme, hvilken partition en given værdi vil blive mappet til, kan du gøre dette hurtigt og nemt med $PARTITION
systemfunktion.
Alt du behøver at vide er navnet på partitionsfunktionen (og selvfølgelig den værdi, du er interesseret i).
Eksempel
Her er et eksempel til at demonstrere.
SELECT $PARTITION.MoviesPartitionFunction(5);
Resultat:
+--------------------+ | (No column name) | |--------------------| | 2 | +--------------------+
I dette tilfælde værdien 5
ville gå ind i partition nummer 2.
Lad os prøve nogle andre værdier.
SELECT
$PARTITION.MoviesPartitionFunction(-100) AS [-100],
$PARTITION.MoviesPartitionFunction(100) AS [100],
$PARTITION.MoviesPartitionFunction(1000) AS [1000],
$PARTITION.MoviesPartitionFunction(100000) AS [100000];
Resultat:
+--------+-------+--------+----------+ | -100 | 100 | 1000 | 100000 | |--------+-------+--------+----------| | 1 | 2 | 3 | 4 | +--------+-------+--------+----------+
Forespørgsler på tværs af databaser
Du kan også præfikse databasenavnet for at forespørge en anden database.
SELECT MovieDb.$PARTITION.MoviesPartitionFunction(5);
Datatypekonvertering
Datatypen for den værdi, du angiver, skal enten matche eller være implicit konverterbar til datatypen for dens tilsvarende partitioneringskolonne.
Hvis ikke, vil du sandsynligvis få fejl 245.
SELECT $PARTITION.MoviesPartitionFunction('Hey!');
Resultat:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Hey!' to data type int.
Bemærk at $PARTITION
returnerer partitionsnummeret for enhver gyldig værdi, uanset om værdien i øjeblikket findes i en opdelt tabel eller et indeks, der bruger partitionsfunktionen.