$PARTITION (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure
Restituisce il numero di partizione in cui verrà eseguito il mapping di un set di valori di colonna di partizionamento per qualsiasi funzione di partizione specificata.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
[ database_name. ] $PARTITION.partition_function_name(expression)
Argomenti
database_name
Nome del database contenente la funzione di partizione.
partition_function_name
Nome di una funzione di partizione esistente in base alla quale viene applicato un set di valori di una colonna di partizionamento.
expression
Espressione il cui tipo di dati deve corrispondere al tipo di dati della colonna di partizionamento corrispondente o deve poter essere convertito in modo implicito in tale tipo di dati. expression può essere anche il nome di una colonna di partizionamento che partecipa a partition_function_name.
Tipi restituiti
int
Osservazioni:
$PARTITION restituisce un valore int compreso tra 1 e il numero di partizioni della funzione di partizione.
$PARTITION restituisce il numero di partizione per qualsiasi valore valido, indipendentemente dal fatto che il valore esista in una tabella o in un dice partizionato che utilizza la funzione di partizione.
Esempi
R. Recuperare il numero di partizione per un set di valori di colonne di partizionamento
Questo esempio crea una funzione di partizione RangePF1
usando RANGE LEFT per eseguire il partizionamento di una tabella o di un indice in quattro partizioni. $PARTITION consente di stabilire che il valore 10
, che rappresenta la colonna di partizionamento di RangePF1
, verrebbe inserito nella partizione 1 della tabella.
CREATE PARTITION FUNCTION RangePF1 ( INT )
AS RANGE LEFT FOR VALUES (10, 100, 1000) ;
GO
SELECT $PARTITION.RangePF1 (10) ;
GO
B. Recuperare il numero di righe di ogni partizione non vuota di una tabella o di un indice partizionato
Questo esempio illustra come usare $PARTITION
per restituire il numero di righe in ogni partizione della tabella che contiene dati.
Esempio:
- Crea uno schema di partizione,
RangePS1
, per la funzione di partizioneRangePF1
. - Crea una tabella,
dbo.PartitionTable
, nello schema di partizioneRangePS1
concol1
come colonna di partizionamento. - Inserisce quattro righe nella tabella
dbo.PartitionTable
. In base alla definizione della funzione di partizione, queste righe verranno inserite nelle partizioni 2 e 3. Le partizioni 1 e 4 rimarranno vuote. - Esegue query su
dbo.PartitionTable
e usa$PARTITION.RangePF1(col1)
nella clausola GROUP BY per eseguire query sul numero di righe in ogni partizione contenente dati.
Nota
Per eseguire questo esempio, è prima di tutto necessario creare la funzione RangePF1
di partizione usando il codice nell'esempio precedente.
CREATE PARTITION SCHEME RangePS1
AS PARTITION RangePF1
ALL TO ('PRIMARY') ;
GO
CREATE TABLE dbo.PartitionTable (col1 int PRIMARY KEY, col2 char(10))
ON RangePS1 (col1) ;
GO
INSERT dbo.PartitionTable (col1, col2)
VALUES ((1,'a row'),(100,'another row'),(500,'another row'),(1000,'another row'))
SELECT
$PARTITION.RangePF1(col1) AS Partition,
COUNT(*) AS [COUNT]
FROM dbo.PartitionTable
GROUP BY $PARTITION.RangePF1(col1)
ORDER BY Partition ;
GO
La query SELECT
restituirà i risultati seguenti:
Partizione | COUNT |
---|---|
2 | 1 |
3 | 3 |
Le righe non vengono restituite per le partizioni numero 1 e 4, che esistono ma non contengono dati.
C. Restituire tutte le righe di una partizione di una tabella o di un indice partizionato
L'esempio seguente restituisce tutte le righe incluse nella partizione 3 della tabella PartitionTable
.
SELECT col1, col2
FROM dbo.PartitionTable
WHERE $PARTITION.RangePF1(col1) = 3 ;
La query restituirà i risultati seguenti:
col1 | col2 |
---|---|
101 | Un'altra riga |
500 | Una terza riga |
501 | Una quarta riga |
Passaggi successivi
Per altre informazioni sul partizionamento delle tabelle, vedere questi articoli: