sql >> Databasteknik >  >> RDS >> Sqlserver

Markören inuti markören

Du har en mängd olika problem. För det första, varför använder du dina specifika @@FETCH_STATUS-värden? Det ska bara vara @@FETCH_STATUS =0.

För det andra väljer du inte din inre markör till något. Och jag kan inte komma på någon omständighet där du skulle markera alla fält på det här sättet - stava dem!

Här är ett exempel att gå efter. Mappen har en primärnyckel "ClientID" som också är en främmande nyckel för Attend. Jag skriver bara ut alla Attend UID:n, uppdelade efter mappklient-ID:

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;

Äntligen, är du Säker vill du göra något liknande i en lagrad procedur? Det är mycket lätt att missbruka lagrade procedurer och återspeglar ofta problem med att karakterisera ditt problem. Exemplet jag gav, till exempel, kunde göras mycket enklare med vanliga utvalda samtal.



  1. Hur man returnerar oracle-utgångsparametrar från en lagrad procedur i .NET

  2. Hitta rader i A som inte har en tillhörande rad i B, där FK är på B?

  3. Importera CSV-fil till SQL Server

  4. Returnera alla användare, även de som inte uppfyller mina kriterier