Om du har en partitionerad tabell eller index i SQL Server, och du vill bestämma vilken partition ett givet värde skulle mappas till, kan du göra detta snabbt och smidigt med $PARTITION
systemfunktion.
Allt du behöver veta är namnet på partitionsfunktionen (och naturligtvis värdet du är intresserad av).
Exempel
Här är ett exempel att visa.
SELECT $PARTITION.MoviesPartitionFunction(5);
Resultat:
+--------------------+ | (No column name) | |--------------------| | 2 | +--------------------+
I det här fallet är värdet 5
skulle gå in i partition nummer 2.
Låt oss prova några andra värden.
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 | +--------+-------+--------+----------+
Frågor över databaser
Du kan också prefixa databasnamnet för att fråga en annan databas.
SELECT MovieDb.$PARTITION.MoviesPartitionFunction(5);
Datatypkonvertering
Datatypen för värdet du anger måste antingen matcha eller vara implicit konverterbar till datatypen för dess motsvarande partitioneringskolumn.
Om inte, kommer du förmodligen att få fel 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.
Observera att $PARTITION
returnerar partitionsnumret för alla giltiga värden, oavsett om värdet för närvarande finns i en partitionerad tabell eller index som använder partitionsfunktionen.