memproses pelbagai baris dengan prosedur yang disimpan
Selalunya, tugas pangkalan data memerlukan melaksanakan prosedur yang disimpan untuk setiap baris yang diambil oleh pertanyaan SQL. Artikel ini menggariskan penyelesaian menggunakan kursor, mekanisme pangkalan data untuk pemprosesan baris berulang.
penyelesaian berasaskan kursor
Kursor bertindak sebagai penunjuk, membolehkan akses berurutan ke set hasil. Ia membolehkan anda untuk melingkari hasil pertanyaan, laksanakan prosedur tersimpan anda untuk setiap baris, dan mengendalikan sebarang data yang dikembalikan atau tindakan berikutnya.
inilah contoh menggunakan kursor dalam MS SQL:
DECLARE @field1 INT;
DECLARE @field2 INT;
DECLARE cur CURSOR LOCAL FOR
SELECT field1, field2 FROM sometable WHERE someotherfield IS NULL;
OPEN cur;
FETCH NEXT FROM cur INTO @field1, @field2;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Execute the stored procedure for each row
EXEC uspYourSproc @field1, @field2;
FETCH NEXT FROM cur INTO @field1, @field2;
END;
CLOSE cur;
DEALLOCATE cur;
Salin selepas log masuk
Kod ini melangkah melalui baris di
di mana sometable
adalah null. Untuk setiap baris, someotherfield
dilaksanakan dengan uspYourSproc
dan field1
sebagai parameter. field2
Pengoptimuman Prestasi
Walaupun kursor menawarkan penyelesaian yang jelas dan mudah, prestasi boleh menjadi kebimbangan. Kursor secara amnya kurang cekap daripada operasi berasaskan set, walaupun lebih cekap daripada manual
gelung. WHILE
Untuk dataset yang besar, pertimbangkan untuk memuatkan data ke dalam jadual sementara terlebih dahulu. Melangkah ke atas jadual sementara dengan kursor dapat meningkatkan prestasi dengan ketara dengan meminimumkan isu penguncian meja.
Kaedah alternatif
Jika boleh dilaksanakan, mengintegrasikan logik prosedur yang disimpan terus ke dalam satu pernyataan SQL
tunggal selalunya pendekatan yang paling berkesan. Ini mengelakkan overhead pemprosesan berulang. UPDATE
Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan prosedur yang disimpan untuk setiap baris yang dikembalikan oleh pertanyaan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!