Bagikan melalui


$PARTITION (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

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

Konvensi sintaks transact-SQL

Sintaks

[ database_name. ] $PARTITION.partition_function_name(expression)

Argumen

database_name

Nama database yang berisi fungsi partisi.

partition_function_name

Nama fungsi partisi yang ada di mana sekumpulan nilai kolom pemartisian sedang diterapkan.

expression

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

Jenis yang dikembalikan

int

Keterangan

mengembalikan nilai int antara 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, mewakili kolom partisi RangePF1, akan dimasukkan ke dalam 1 partisi 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.

Catatan

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

  1. Buat skema partisi, RangePS1, untuk fungsi partisi RangePF1.

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. Buat tabel, dbo.PartitionTable, pada skema partisi RangePS1 dengan col1 sebagai kolom partisi.

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. Sisipkan empat baris ke dalam tabel dbo.PartitionTable. Baris-baris ini dimasukkan ke dalam partisi berdasarkan fungsi partisi definisi RangePF1: 1 dan 10 masuk ke partisi 1, sementara 500 dan 1000 masuk ke 3.

    INSERT dbo.PartitionTable (col1, col2)
    VALUES (1, 'a row'),
        (10, 'another row'),
        (500, 'another row'),
        (1000, 'another row');
    GO
    
  4. Kueri dbo.PartitionTable dan gunakan $PARTITION.RangePF1(col1) dalam klausa GROUP BY untuk mengkueri jumlah baris di setiap partisi yang berisi data.

    SELECT $PARTITION.RangePF1 (col1) AS Partition,
           COUNT(*) AS [COUNT]
    FROM dbo.PartitionTable
    GROUP BY $PARTITION.RangePF1 (col1)
    ORDER BY Partition;
    GO
    

Berikut adalah hasil yang ditetapkan.

Partisi COUNT
1 2
3 2

Baris tidak dikembalikan untuk nomor partisi 2, 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;

Berikut adalah hasil yang ditetapkan.

col1 col2
500 baris lain
1000 baris lain