Menggunakan perulangan T-SQL untuk kumpulan SQL khusus di Azure Synapse Analytics

Disertakan dalam artikel ini adalah tips untuk pengembangan solusi kumpulan SQL khusus menggunakan perulangan T-SQL dan mengganti kursor.

Tujuan perulangan WHILE

Kumpulan SQL khusus di Azure Synapse mendukung perulanganWHILE 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 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, sementara perulangan adalah alternatif yang bagus untuk mengganti kursor.

Mengganti kursor di kumpulan SQL khusus

Namun, sebelum menyelam terlebih dahulu Anda harus bertanya pada diri Anda pertanyaan berikut: "Mungkinkah kursor ini ditulis ulang untuk menggunakan operasi berbasis set?"

Dalam banyak kasus, jawabannya adalah ya dan sering merupakan pendekatan terbaik. Operasi berbasis set sering memiliki peforma yang lebih cepat daripada pendekatan iteratif, baris demi baris.

Kursor baca-saja yang maju dengan cepat dapat dengan mudah diganti dengan konstruksi perulangan. Contoh berikut adalah contoh 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, menginisialisasi variabel yang diperlukan untuk melakukan perulangan:

DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
,       @i INT = 1
;

Sekarang perulangan 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.