Bagikan melalui


$PARTITION (T-SQL)

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Mengembalikan nomor partisi tempat sekumpulan nilai kolom partisi akan dipetakan untuk fungsi partisi yang ditentukan.

Konvensi sintaks transact-SQL

Sintaks

[ database_name. ] $PARTITION.partition_function_name(expression)  

Argumen

database_name
Adalah nama database yang berisi fungsi partisi.

partition_function_name
Adalah nama fungsi partisi yang ada di mana sekumpulan nilai kolom partisi sedang diterapkan.

expression
Adalah ekspresi yang jenis datanya harus cocok atau secara implisit dapat dikonversi ke jenis data kolom partisi yang sesuai. ekspresi juga bisa menjadi nama kolom partisi yang saat ini berpartisipasi dalam partition_function_name.

Jenis yang dikembalikan

int

Keterangan

$PARTITION mengembalikan nilai int antara 1 dan jumlah partisi fungsi partisi.

$PARTITION mengembalikan nomor partisi untuk nilai yang valid, terlepas dari apakah nilai saat ini ada dalam tabel atau indeks yang dipartisi yang menggunakan fungsi partisi.

Contoh

J. Mendapatkan nomor partisi untuk sekumpulan nilai kolom partisi

Contoh ini membuat fungsi RangePF1 partisi menggunakan RANGE LEFT yang akan mempartisi tabel atau indeks menjadi empat partisi. $PARTITION digunakan untuk menentukan bahwa nilai 10, yang mewakili kolom partisi , RangePF1akan dimasukkan ke dalam partisi 1 tabel.

CREATE PARTITION FUNCTION RangePF1 ( INT )  
AS RANGE LEFT FOR VALUES (10, 100, 1000) ;  
GO

SELECT $PARTITION.RangePF1 (10) ;  
GO  

B. Mendapatkan jumlah baris di setiap partisi yang tidak ada dari tabel atau indeks yang dipartisi

Contoh ini memperlihatkan cara menggunakan $PARTITION untuk mengembalikan jumlah baris di setiap partisi tabel yang berisi data.

Contohnya:

  • Membuat skema partisi, RangePS1, untuk fungsi RangePF1partisi .
  • Membuat tabel, dbo.PartitionTable, pada RangePS1 skema partisi dengan col1 sebagai kolom partisi.
  • Menyisipkan empat baris ke dbo.PartitionTable dalam tabel. Berdasarkan definisi fungsi partisi, baris ini akan dimasukkan ke dalam partisi 2 dan 3. Partisi 1 dan 4 akan tetap kosong.
  • Mengkueri dbo.PartitionTable dan menggunakan dalam klausul $PARTITION.RangePF1(col1) GROUP BY untuk mengkueri jumlah baris di setiap partisi yang berisi data.

Catatan

Untuk menjalankan contoh ini, Anda harus terlebih dahulu membuat fungsi RangePF1 partisi menggunakan kode dalam contoh sebelumnya.

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  

Kueri SELECT harus mengembalikan hasil berikut:

Partisi COUNT
2 1
3 3

Baris tidak dikembalikan untuk partisi nomor 1 dan 4, yang ada tetapi tidak berisi data.

C. Mengembalikan semua baris dari satu partisi tabel atau indeks yang dipartisi

Contoh berikut mengembalikan semua baris yang berada di partisi 3 tabel PartitionTable.

SELECT col1, col2
FROM dbo.PartitionTable
WHERE $PARTITION.RangePF1(col1) = 3 ;  

Kueri harus mengembalikan hasil berikut:

col1 col2
101 baris lain
500 baris ketiga
501 baris keempat

Langkah berikutnya

Pelajari selengkapnya tentang pemartisian tabel di artikel ini: