Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Disertakan dalam artikel ini adalah tips untuk pengembangan solusi kumpulan SQL khusus menggunakan perulangan T-SQL dan mengganti kursor.
Tujuan dari WHILE loop
Kumpulan SQL khusus di Azure Synapse mendukung perulangan WHILE untuk blok pernyataan yang dieksekusi berulang kali. Perulangan WHILE ini berlanjut selama kondisi yang ditentukan benar atau sampai kode secara khusus mengakhiri perulangan menggunakan kata kunci BREAK.
Perulangan berguna untuk mengganti kursor yang ditentukan dalam kode SQL. Untungnya, hampir semua kursor yang ditulis dalam kode SQL adalah tipe maju cepat, baca-saja. Jadi, perulangan WHILE adalah alternatif yang bagus untuk mengganti kursor.
Mengganti kursor di kumpulan SQL khusus
Namun, sebelum terjun langsung, Anda harus mengajukan pertanyaan berikut pada diri sendiri: "Mungkinkah kursor ini ditulis ulang untuk menggunakan operasi berbasis set?"
Dalam banyak kasus, jawabannya adalah ya dan sering menjadi pendekatan terbaik. Operasi berbasis kumpulan sering kali lebih cepat dibandingkan dengan pendekatan berulang yang dilakukan baris demi baris.
Kursor baca saja yang maju cepat dapat dengan mudah diganti dengan struktur perulangan. Contoh berikut adalah yang sederhana. Contoh kode ini memperbarui statistik untuk setiap tabel dalam database. Dengan mengulangi tabel dalam perulangan, setiap perintah dijalankan secara berurutan.
Pertama, buat tabel sementara yang berisi nomor baris unik yang digunakan untuk mengidentifikasi pernyataan individual:
CREATE TABLE #tbl
WITH
( DISTRIBUTION = ROUND_ROBIN
)
AS
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Sequence
, [name]
, 'UPDATE STATISTICS '+QUOTENAME([name]) AS sql_code
FROM sys.tables
;
Kedua, inisialisasi variabel yang diperlukan untuk melakukan perulangan:
DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
, @i INT = 1
;
Jalankan pernyataan-pernyataan secara berulang, satu per satu.
WHILE @i <= @nbr_statements
BEGIN
DECLARE @sql_code NVARCHAR(4000) = (SELECT sql_code FROM #tbl WHERE Sequence = @i);
EXEC sp_executesql @sql_code;
SET @i +=1;
END
Terakhir hilangkan tabel sementara yang dibuat di langkah pertama
DROP TABLE #tbl;
Langkah berikutnya
Untuk tips pengembangan selengkapnya, lihat ringkasan pengembangan.