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.
Artikel ini memberi Anda tips penting untuk menggunakan perulangan T-SQL, mengganti kursor, dan mengembangkan solusi terkait dengan Synapse SQL.
Purpose of WHILE loops
Synapse SQL mendukung perulangan WHILE untuk blok pernyataan yang berulang kali dijalankan. 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. Fortunately, almost all cursors that are written in SQL code are of the fast forward, read-only variety. Jadi, perulangan WHILE adalah alternatif yang bagus untuk mengganti kursor.
Mengganti kursor di Synapse SQL
Sebelum menyelam, pertanyaan berikut harus dipertimbangkan: "Bisakah kursor ini ditulis ulang untuk menggunakan operasi berbasis set?" Dalam banyak kasus, jawabannya adalah ya dan sering menjadi pendekatan terbaik. Operasi berbasis set sering dijalankan lebih cepat daripada pendekatan baris demi baris berulang.
Fast forward read-only cursors are easily replaced with a looping construct. Kode 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, inisialisasi variabel yang diperlukan untuk menjalankan perulangan:
DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
, @i INT = 1
;
Now loop over statements executing them one at a time:
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.