Menggunakan perulangan T-SQL dengan Synapse SQL di Azure Synapse Analytics
Artikel ini memberi Anda tips penting untuk menggunakan perulangan T-SQL, mengganti kursor, dan mengembangkan solusi terkait dengan Synapse SQL.
Tujuan perulangan WHILE
Synapse SQL mendukung perulangan WHILE untuk berulang kali mengeksekusi blok pernyataan. Perulangan WHILE ini berlanjut selama kondisi yang ditentukan benar atau sampai kode secara khusus mengakhiri perulangan menggunakan kata kunci BREAK.
Perulangan di Synapse SQL berguna untuk mengganti kursor yang ditentukan dalam kode SQL. Untungnya, hampir semua kursor yang ditulis dalam kode SQL adalah varietas yang maju dengan cepat dan hanya dibaca. Jadi, perulangan WHILE adalah alternatif yang bagus untuk mengganti kursor.
Mengganti kursor di Synapse SQL
Sebelum melanjutkan, pertanyaan berikut harus dipertimbangkan: "Bisakah kursor ini ditulis ulang untuk menggunakan operasi berbasis kumpulan?" Dalam banyak kasus, jawabannya adalah ya dan sering kali merupakan pendekatan terbaik. Operasi berbasis set sering mengeksekusi lebih cepat daripada pendekatan iteratif, baris demi baris.
Kursor baca-saja yang maju cepat dapat dengan mudah diganti dengan konstruksi perulangan. Kode berikut adalah contoh 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
;
Sekarang perulangan di atas pernyataan mengeksekusi mereka 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
Akhirnya hilangkan tabel sementara yang dibuat pada langkah pertama
DROP TABLE #tbl;
Langkah berikutnya
Untuk tips pengembangan selengkapnya, buka gambaran pengembangan.