Di SQL Server, Anda dapat menggunakan SET ROWCOUNT
untuk membatasi baris yang dikembalikan oleh kueri.
Cara kerjanya adalah menyebabkan SQL Server berhenti memproses kueri setelah jumlah baris yang ditentukan dikembalikan.
Ini mirip dengan TOP()
klausa, tetapi dengan perbedaan bahwa SET ROWCOUNT
diatur di luar kueri, dan akan memengaruhi semua kueri berikutnya.
Contoh
Berikut ini contoh untuk didemonstrasikan.
Pertama, mari kita lakukan kueri tanpa menyetel ROWCOUNT
.
SELECT * FROM Dogs;
Hasil:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | | 3 | Wag | | 1002 | Fetch | +---------+-----------+ (4 rows affected)
Jadi empat baris dikembalikan tanpa menyetel ROWCOUNT
.
Sekarang mari kita gunakan SET ROWCOUNT
untuk membatasi jumlah baris, lalu jalankan kueri lagi.
SET ROWCOUNT 2;
SELECT * FROM Dogs;
Hasil:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Permintaan Selanjutnya
Seperti disebutkan, SET ROWCOUNT
memengaruhi semua kueri berikutnya.
Jika saya menjalankan kueri berikut segera setelah kueri sebelumnya, dua baris juga dikembalikan.
SELECT * FROM Cats;
Hasil:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Ini terlepas dari kenyataan bahwa tiga baris akan dikembalikan, seandainya saya tidak menggunakan SET ROWCOUNT
untuk membatasi baris yang dikembalikan.
Saya dapat memverifikasi ini dengan COUNT()
klausa.
SELECT COUNT(*) FROM Cats;
Hasil:
+--------------------+ | (No column name) | |--------------------| | 3 | +--------------------+
Setel Ulang ROWCOUNT
Anda dapat mengatur ulang ROWCOUNT
nilai dengan memberinya nilai 0
(nol).
Ini berarti bahwa kueri tidak akan lagi dibatasi hasilnya. Kueri akan terus diproses hingga akhir.
SET ROWCOUNT 0;
SELECT * FROM Cats;
Hasil:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected)
ROWCOUNT vs TOP()
Jika Anda menggunakan TOP()
klausa dalam kueri saat Anda telah menyetel ROWCOUNT
, ROWCOUNT
. Anda pengaturan hanya akan menimpa TOP()
jika ROWCOUNT
adalah nilai yang lebih kecil.
Berikut adalah contoh di mana ROWCOUNT
adalah nilai yang lebih besar.
SET ROWCOUNT 3;
SELECT TOP(2) * FROM Dogs;
Hasil:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Dalam hal ini, TOP()
klausa menang.
Dan inilah contoh di mana ROWCOUNT
adalah nilai yang lebih kecil.
SET ROWCOUNT 1;
SELECT TOP(2) * FROM Dogs;
Hasil:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | +---------+-----------+ (1 row affected)
Kompatibilitas
Perhatikan bahwa Microsoft menyarankan agar SET ROWCOUNT
tidak akan mempengaruhi DELETE
, INSERT
, dan UPDATE
pernyataan dalam rilis SQL Server di masa mendatang. Microsoft menganjurkan agar Anda menghindari penggunaan tersebut dalam pekerjaan pengembangan baru, dan berencana untuk memodifikasi aplikasi yang saat ini menggunakannya.
Microsoft merekomendasikan penggunaan TOP()
klausa jika Anda perlu membatasi baris yang terpengaruh di DELETE
, INSERT
, dan UPDATE
pernyataan.
Hati-hati
ROWCOUNT
opsi berfungsi pada sebagian besar pernyataan T-SQL, termasuk pemicu. Namun, itu tidak memengaruhi kursor dinamis, tetapi membatasi baris kunci dan kursor tidak sensitif. Oleh karena itu, opsi ini harus digunakan dengan hati-hati.