Rumah >pangkalan data >tutorial mysql >Bolehkah Prosedur Tersimpan Dilaksanakan untuk Setiap Baris Jadual Tanpa Kursor?

Bolehkah Prosedur Tersimpan Dilaksanakan untuk Setiap Baris Jadual Tanpa Kursor?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-05 21:05:45822semak imbas

Can Stored Procedures Be Executed for Each Table Row Without Cursors?

Melaksanakan Prosedur Tersimpan untuk Setiap Baris Jadual tanpa Perlu Kursor

Apabila berhadapan dengan tugas memanggil prosedur tersimpan untuk setiap baris dalam jadual, adalah wajar untuk mempertimbangkan pendekatan lelaran melalui baris menggunakan kursor. Walau bagaimanapun, adalah mungkin untuk mencapai tugas ini tanpa bergantung pada kursor.

Menggunakan Pendekatan Berasaskan Set

Dalam pendekatan berasaskan set, kami berhasrat untuk mencari cara untuk melaksanakan operasi untuk semua baris secara serentak. Sebagai contoh, jika matlamat kami adalah untuk mengemas kini lajur untuk setiap baris dalam jadual, kami boleh memanfaatkan pernyataan UPDATE dengan klausa WHERE yang sesuai untuk mengubah suai rekod yang berkaitan sekali gus.

Kes Khusus: Mengulangi Lajur Baris

Walau bagaimanapun, apabila berhadapan dengan senario di mana lajur baris perlu digunakan sebagai parameter input untuk prosedur tersimpan, pendekatan yang sedikit berbeza diperlukan. Seperti yang diterangkan dalam jawapan yang disediakan:

  • Isytihar dan Mulakan Pembolehubah: Tentukan pembolehubah untuk menjejaki pelanggan yang sedang kami proses.
  • Lelaran over Rows: Gunakan gelung WHILE dengan pernyataan SELECT untuk mendapatkan dan mengemas kini pembolehubah CustomerID dengan ID pelanggan seterusnya dalam meja.
  • Keadaan Keluar: Tetapkan syarat untuk keluar dari gelung apabila tiada lagi pelanggan.
  • Melaksanakan Prosedur Tersimpan: Untuk setiap pelanggan, hubungi prosedur tersimpan yang ditentukan dengan parameter CustomerID.

Kod Contoh

Coretan kod yang disediakan menggambarkan cara pendekatan ini boleh dilaksanakan:

-- Declare & initialize (2008 syntax)
DECLARE @CustomerID INT = 0

-- Iterate over all customers
WHILE (1 = 1) 
BEGIN  

  -- Get next customerId
  SELECT TOP 1 @CustomerID = CustomerID
  FROM Sales.Customer
  WHERE CustomerID > @CustomerId 
  ORDER BY CustomerID

  -- Exit loop if no more customers
  IF @@ROWCOUNT = 0 BREAK;

  -- call your sproc
  EXEC dbo.YOURSPROC @CustomerId

END

Atas ialah kandungan terperinci Bolehkah Prosedur Tersimpan Dilaksanakan untuk Setiap Baris Jadual Tanpa Kursor?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn