Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kursor di dalam kursor

Anda memiliki berbagai masalah. Pertama, mengapa Anda menggunakan nilai @@FETCH_STATUS spesifik Anda? Seharusnya hanya @@FETCH_STATUS =0.

Kedua, Anda tidak memilih kursor batin Anda ke apa pun. Dan saya tidak dapat memikirkan situasi apa pun di mana Anda akan memilih semua bidang dengan cara ini - jelaskan!

Berikut adalah contoh untuk pergi oleh. Folder memiliki kunci utama "ClientID" yang juga merupakan kunci asing untuk Hadir. Saya baru saja mencetak semua Attend UID, yang dikelompokkan berdasarkan Folder ClientID:

Declare @ClientID int;
Declare @UID int;

DECLARE Cur1 CURSOR FOR
    SELECT ClientID From Folder;

OPEN Cur1
FETCH NEXT FROM Cur1 INTO @ClientID;
WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT 'Processing ClientID: ' + Cast(@ClientID as Varchar);
    DECLARE Cur2 CURSOR FOR
        SELECT UID FROM Attend Where [email protected];
    OPEN Cur2;
    FETCH NEXT FROM Cur2 INTO @UID;
    WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT 'Found UID: ' + Cast(@UID as Varchar);
        FETCH NEXT FROM Cur2 INTO @UID;
    END;
    CLOSE Cur2;
    DEALLOCATE Cur2;
    FETCH NEXT FROM Cur1 INTO @ClientID;
END;
PRINT 'DONE';
CLOSE Cur1;
DEALLOCATE Cur1;

Akhirnya, apakah Anda YAKIN Anda ingin melakukan sesuatu seperti ini dalam prosedur tersimpan? Sangat mudah untuk menyalahgunakan prosedur tersimpan dan sering kali mencerminkan masalah dalam mengkarakterisasi masalah Anda. Contoh yang saya berikan, misalnya, bisa jauh lebih mudah dilakukan menggunakan panggilan pilih standar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa Pengindeksan Teks Lengkap SQL tidak mengembalikan hasil untuk kata-kata yang mengandung #?

  2. Bagaimana INTERSECT Bekerja di SQL Server

  3. DATEDIFF dalam format HH:MM:SS

  4. cara menangani pemetaan ulang hanya dapat dilakukan untuk pengguna yang dipetakan ke login Windows atau SQL

  5. Apa cara tercepat untuk menyisipkan banyak data secara massal di SQL Server (klien C#)