Condividi tramite


$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.

  1. Creare uno schema di partizione, RangePS1, per la funzione di partizione RangePF1.

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. Creare una tabella, dbo.PartitionTable, nello schema di partizione RangePS1 con col1 come colonna di partizionamento.

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. Inserire quattro righe nella tabella dbo.PartitionTable. Queste righe vengono inserite in partizioni in base alla definizione della funzione di partizione RangePF1: 1 e 10 passare alla partizione 1, mentre 500 e 1000 passare a 3.

    INSERT dbo.PartitionTable (col1, col2)
    VALUES (1, 'a row'),
        (10, 'another row'),
        (500, 'another row'),
        (1000, 'another row');
    GO
    
  4. Eseguire una query sul dbo.PartitionTable e usare $PARTITION.RangePF1(col1) nella clausola GROUP 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