Vous avez une variété de problèmes. Tout d'abord, pourquoi utilisez-vous vos valeurs @@FETCH_STATUS spécifiques ? Il devrait juste être @@FETCH_STATUS =0.
Deuxièmement, vous ne sélectionnez pas votre curseur intérieur dans n'importe quoi. Et je ne vois aucune circonstance où vous sélectionneriez tous les champs de cette manière - épelez-les !
Voici un échantillon pour passer. Le dossier a une clé primaire "ClientID" qui est également une clé étrangère pour Attend. J'imprime simplement tous les UID d'assistance, ventilés par dossier 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;
Enfin, êtes-vous SÛR vous voulez faire quelque chose comme ça dans une procédure stockée ? Il est très facile d'abuser des procédures stockées et reflète souvent des problèmes de caractérisation de votre problème. L'exemple que j'ai donné, par exemple, pourrait être beaucoup plus facilement réalisé en utilisant des appels de sélection standard.