Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Kursor wewnątrz kursora

Masz różne problemy. Po pierwsze, dlaczego używasz określonych wartości @@FETCH_STATUS? Powinno to być po prostu @@FETCH_STATUS =0.

Po drugie, nie wybierasz swojego wewnętrznego Kursora do byle co. I nie wyobrażam sobie żadnej okoliczności, w której można by wybrać wszystkie pola w ten sposób – przeliteruj je!

Oto próbka. Folder ma klucz podstawowy „ClientID”, który jest również kluczem obcym programu Attend. Po prostu drukuję wszystkie identyfikatory Attend UID, podzielone według folderu 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;

Wreszcie, czy NA PEWNO? chcesz zrobić coś takiego w procedurze składowanej? Nadużywanie zapisanych procedur jest bardzo łatwe i często odzwierciedla problemy w charakterystyce problemu. Na przykład próbka, którą podałem, może być znacznie łatwiej wykonana przy użyciu standardowych wywołań Select.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja formatu daty SQL Server

  2. MS Access wywołanie procedury składowanej SQL Server

  3. SSRS — zachować tę samą szerokość tabeli podczas dynamicznego ukrywania kolumn?

  4. Fronton MS-Access nie rozpoznaje dat z SQL Server

  5. Jak utworzyć klucz podstawowy w SQL Server (przykłady T-SQL)