$PARTITION (Transact-SQL)
Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure
Restituisce il numero di partizione in cui è possibile eseguire 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 che contiene la funzione di partizione.
partition_function_name
Nome di qualsiasi funzione di partizione esistente in base alla quale viene applicato un set di valori di colonna di partizionamento.
expression
Espressione il cui tipo di dati deve corrispondere o essere convertibile in modo implicito nel tipo di dati della colonna di partizionamento corrispondente. Questo parametro può anche essere il nome di una colonna di partizionamento che attualmente partecipa a partition_function_name.
Tipi restituiti
int
Osservazioni:
$PARTITION
restituisce un valore int 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 un indice 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
viene usato per determinare che il valore 10
, che rappresenta la colonna di partizionamento di RangePF1
, verrà 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.
Nota
Per eseguire questo esempio, è prima di tutto necessario creare la funzione RangePF1
di partizione usando il codice nell'esempio precedente.
Creare uno schema di partizione,
RangePS1
, per la funzione di partizioneRangePF1
.CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GO
Creare una tabella,
dbo.PartitionTable
, nello schema di partizioneRangePS1
concol1
come colonna di partizionamento.CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GO
Inserire quattro righe nella tabella
dbo.PartitionTable
. Queste righe vengono inserite in partizioni in base alla definizione della funzione di partizioneRangePF1
:1
e10
passare alla partizione1
, mentre500
e1000
passare a3
.INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GO
Eseguire una query sul
dbo.PartitionTable
e usare$PARTITION.RangePF1(col1)
nella clausolaGROUP BY
per eseguire una query sul numero di righe in ogni partizione contenente dati.SELECT $PARTITION.RangePF1 (col1) AS Partition, COUNT(*) AS [COUNT] FROM dbo.PartitionTable GROUP BY $PARTITION.RangePF1 (col1) ORDER BY Partition; GO
Ecco il set di risultati.
Partizione | COUNT |
---|---|
1 | 2 |
3 | 2 |
Le righe non vengono restituite per il numero di partizione 2
, che esiste ma non contiene 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;
Ecco il set di risultati.
col1 | col2 |
---|---|
500 |
Un'altra riga |
1000 |
Un'altra riga |