Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Restituisce tutte le righe da una partizione specifica in SQL Server (T-SQL)

Quando crei una tabella partizionata in SQL Server, specifichi i valori da inserire in ciascuna partizione.

Questo viene fatto quando crei la funzione di partizione. Quando crei la funzione di partizione, specifichi i valori limite, che determinano quali valori vanno inseriti in ciascuna partizione.

Dopo aver creato la tabella partizionata e aver inserito i dati, puoi eseguire un normale SELECT istruzione per restituire dati, proprio come faresti con una tabella non partizionata (in realtà, anche le tabelle non partizionate hanno una partizione).

Ma sapevi che puoi anche specificare da quale partizione vuoi i dati?

Puoi farlo con l'aiuto di $PARTITION funzione di sistema nel tuo WHERE clausola.

Esempio

Immagina di avere una tabella partizionata che contiene i seguenti dati:

+---------+-------------+
| CatId   | CatName     |
|---------+-------------|
| 1       | Meow        |
| 2       | Fluffy      |
| 3       | Scratch     |
| 4       | Bulldog     |
| 5       | King George |
| 6       | Sharp       |
| 7       | Fritz       |
| 8       | Garfield    |
| 9       | Boss        |
+---------+-------------+

E CatId è la colonna di partizionamento.

E abbiamo usato la seguente funzione di partizione per creare le sue partizioni:

CREATE PARTITION FUNCTION CatsPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (-1, 5, 100);

Questo ci dice come vengono archiviati i dati, in base ai valori nella colonna di partizionamento.

Quindi ora possiamo eseguire una query che restituisce solo dati da una partizione specifica.

Restituisci i dati dalla seconda partizione

Ecco come possiamo restituire tutte le righe dalla seconda partizione.

SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;

Risultato:

+---------+-------------+
| CatId   | CatName     |
|---------+-------------|
| 1       | Meow        |
| 2       | Fluffy      |
| 3       | Scratch     |
| 4       | Bulldog     |
| 5       | King George |
+---------+-------------+

Restituire i dati dalla terza partizione

Ed ecco tutti i dati della terza partizione.

SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;

Risultato:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 6       | Sharp     |
| 7       | Fritz     |
| 8       | Garfield  |
| 9       | Boss      |
+---------+-----------+

Restituire i dati dalla prima e dall'ultima partizione

In questo caso, la mia prima partizione è vuota, perché non ci sono valori negativi nel CatId colonna.

SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;

Risultato:

(0 rows affected)

Allo stesso modo, anche l'ultima partizione è vuota, poiché non ci sono abbastanza righe per popolare quella partizione.

SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;

Risultato:

(0 rows affected)

Ciò aderisce alla raccomandazione di Microsoft di lasciare vuote la prima e l'ultima partizione, al fine di evitare qualsiasi spostamento di dati nel caso in cui le partizioni vengano divise o unite in futuro.