SQL adalah bahasa yang sangat berbeda dibandingkan dengan apa yang Anda terbiasa. Ini fokus pada apa , bukan bagaimana . Anda memberi tahu SQL Server hasil apa yang Anda inginkan, dan biarkan ia mencari tahu bagaimana menghasilkan jawabannya. Atau, untuk mengulang kembali apa yang baru saja saya katakan - tidak ada loop untuk di SQL.
Damien_The_Unbeliever
5
WHILE @I < 10; SET @I = @I + 1; BEGIN; ...; END? Namun, ini tidak boleh digunakan untuk sebagian besar pemrosesan permintaan (tetapi kadang-kadang diperlukan untuk manipulasi imperatif). Banyak petunjuk / petunjuk seperti itu tersedia di google menggunakan pencarian "tsql for loop".
7
Hindari loop yang mendukung GABUNG dan mengatur operasi.
Oded
2
Jika Anda bukan ahli dalam SQL, Anda tidak harus mempertimbangkan menggunakan loop. Hanya ada beberapa kondisi di mana seseorang diperlukan dan sebagian besar waktu lainnya, menggunakan loop adalah setara dengan mendorong mobil Anda alih-alih mengendarainya. Belajarlah berpikir dalam hal kumpulan data alih-alih perulangan melalui catatan. LOoping adalah fungsi tingkat ahli bukan karena sintaksinya sulit tetapi karena Anda harus tahu persis seberapa besar kerusakan yang dapat Anda lakukan dengannya sebelum Anda diizinkan untuk menggunakannya.
HLGEM
2
Kadang-kadang itu bisa digunakan untuk menyulap data uji dengan cepat dalam database uji yang baru saja akan Anda hapus segera sesudahnya. Dalam hal ini, menggunakan ini menghilangkan kebutuhan untuk pergi melalui program terpisah yang ditulis dalam sesuatu yang lebih seperti C #, dan teknik tidak terlalu menjadi perhatian utama. Sekali lagi, saya hanya mengatakan ini dalam hal data uji.
BERGABUNG (dan mengatur operasi) harus lebih disukai daripada perulangan konstruksi dalam SQL.
Oded
6
Tidak ada batasan untuk menekankan (terutama bagi mereka yang baru mengenal SQL), apa yang dikatakan Damien: "SQL adalah bahasa yang sangat berbeda dibandingkan dengan apa yang Anda terbiasa. Ini berfokus pada apa, bukan bagaimana. Anda memberi tahu SQL Server apa hasil yang Anda inginkan, dan biarkan mencari tahu cara menghasilkan jawabannya. "
ypercubeᵀᴹ
1
Sangat menarik untuk dicatat bahwa dokumentasi MS salah di sini, sungguh. WHILE tidak mengambil ekspresi boolean - dibutuhkan predikat - yang selain dapat mengevaluasi ke TRUE atau FALSE, juga bisa TIDAK DIKETAHUI.
Damien_The_Unbeliever
360
Tidak ada untuk loop, hanya loop sementara:
DECLARE@i int =0WHILE@i <20BEGINSET@i =@i +1/* do some work */END
Perhatikan bahwa jika Anda berniat menggunakan indeks dalam loop, Anda mungkin ingin menambah hal terakhir, bukan yang pertama, tergantung pada kasus penggunaan Anda.
jinglesthula
3
Perhatikan juga bahwa nilai default untuk variabel lokal tidak didukung dalam SQL biasa. Karenanya Anda perlu terpisah SET @i = 0sebelum untuk loop.
Nux
1
@Nux: 0 diatur selama deklarasi secara eksplisit
TcKs
7
Ya, tapi itu tidak berfungsi pada SQL Server yang lebih lama (setidaknya tidak pada 2005).
Nux
Juga, harus dicatat bahwa umumnya pekerjaan dilakukan sebelum bilangan bulat bertambah. Banyak untuk loop dalam SQL benar-benar menggunakan integer dalam pekerjaan mereka (iterasi dari baris ke baris atau hasil untuk menghasilkan tabel temp) dan dapat dibuang jika peningkatan terjadi pada awal siklus daripada akhir.
CSS
34
Informasi tambahan
Hanya untuk menambahkan karena tidak ada yang memposting jawaban yang mencakup cara untuk benar-benar mengulangi dataset di dalam sebuah loop, Anda dapat menggunakan kata kunci OFFSET FETCH .
Pemakaian
DECLARE@i INT =0;SELECT@count= Count(*)FROM{TABLE}WHILE@i <=@count
BEGINSELECT*FROM{TABLE}ORDERBY{COLUMN}
OFFSET @i ROWSFETCH NEXT 1ROWS ONLY
SET@i =@i +1;END
Selamat Datang di Stack Overflow! Apakah Anda mempertimbangkan untuk menambahkan narasi untuk menjelaskan mengapa kode ini berfungsi, dan apa yang membuatnya menjadi jawaban untuk pertanyaan itu? Ini akan sangat membantu bagi orang yang mengajukan pertanyaan, dan siapa pun yang datang.
Andrew Barber
18
Ini cukup jelas.
Edward Olamisan
4
Bagaimana ini tidak jelas? Saya memiliki pertanyaan yang sama, saya langsung mengerti jawabannya.
DanteTheSmith
1
Apa perbedaan jawaban ini dengan @TcK kecuali konvensi penamaan?
Sushil Jadhav
7
Bagaimana dengan ini:
BEGIN
Do Something
END
GO 10
... tentu saja Anda bisa memasukkan penghitung tambahan di dalamnya jika Anda perlu menghitung.
Untuk loop belum secara resmi didukung oleh SQL server. Sudah ada jawaban untuk mencapai berbagai cara FOR Loop. Saya merinci jawaban tentang cara untuk mencapai berbagai jenis loop di SQL server.
UNTUK Loop
DECLARE@cnt INT =0;WHILE@cnt <10BEGINPRINT'Inside FOR LOOP';SET@cnt =@cnt +1;END;PRINT'Done FOR LOOP';
Jika Anda tahu, Anda harus menyelesaikan iterasi pertama dari loop, maka Anda dapat mencoba DO..WHILE atau REPEAT..UNTIL versi SQL server.
DO..WHILE Loop
DECLARE@X INT=1;
WAY:--> Here the DO statementPRINT@X;SET@X +=1;IF@X<=10GOTO WAY;
REPEAT..UNTIL Loop
DECLARE@X INT =1;
WAY:-- Here the REPEAT statementPRINT@X;SET@X +=1;
IFNOT(@X >10)GOTO WAY;
WHILE @I < 10; SET @I = @I + 1; BEGIN; ...; END
? Namun, ini tidak boleh digunakan untuk sebagian besar pemrosesan permintaan (tetapi kadang-kadang diperlukan untuk manipulasi imperatif). Banyak petunjuk / petunjuk seperti itu tersedia di google menggunakan pencarian "tsql for loop".Jawaban:
T-SQL tidak memiliki
FOR
loop, ia memilikiWHILE
loopWHILE (Transact-SQL)
sumber
Tidak ada untuk loop, hanya loop sementara:
sumber
SET @i = 0
sebelum untuk loop.Informasi tambahan
Hanya untuk menambahkan karena tidak ada yang memposting jawaban yang mencakup cara untuk benar-benar mengulangi dataset di dalam sebuah loop, Anda dapat menggunakan kata kunci OFFSET FETCH .
Pemakaian
sumber
sumber
Bagaimana dengan ini:
... tentu saja Anda bisa memasukkan penghitung tambahan di dalamnya jika Anda perlu menghitung.
sumber
Untuk loop belum secara resmi didukung oleh SQL server. Sudah ada jawaban untuk mencapai berbagai cara FOR Loop. Saya merinci jawaban tentang cara untuk mencapai berbagai jenis loop di SQL server.
UNTUK Loop
Jika Anda tahu, Anda harus menyelesaikan iterasi pertama dari loop, maka Anda dapat mencoba DO..WHILE atau REPEAT..UNTIL versi SQL server.
DO..WHILE Loop
REPEAT..UNTIL Loop
Referensi
sumber
Jawaban sederhana adalah
NO !!
.SAAT:
PERGI KE :
Saya selalu lebih suka
WHILE
daripadaGOTO
pernyataan.sumber
Sedangkan Loop contoh dalam T-SQL yang mencantumkan tanggal awal hingga akhir bulan ini.
sumber
Cobalah, pelajari:
Dengan tanggal:
sumber