Bạn có một loạt các vấn đề. Trước tiên, tại sao bạn lại sử dụng các giá trị @@ FETCH_STATUS cụ thể của mình? Nó chỉ nên là @@ FETCH_STATUS =0.
Thứ hai, bạn không chọn Con trỏ bên trong của mình thành bất cứ điều gì. Và tôi không thể nghĩ đến bất kỳ trường hợp nào mà bạn sẽ chọn tất cả các trường theo cách này - hãy đánh vần chúng!
Đây là một mẫu để xem qua. Thư mục có khóa chính là "ClientID" cũng là khóa ngoại cho Tham dự. Tôi chỉ đang in tất cả UID tham dự, được chia nhỏ theo 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;
Cuối cùng, bạn có CHẮC CHẮN bạn muốn làm một cái gì đó như thế này trong một thủ tục được lưu trữ? Rất dễ lạm dụng các thủ tục được lưu trữ và thường phản ánh các vấn đề trong việc mô tả vấn đề của bạn. Ví dụ:mẫu mà tôi đã đưa ra có thể được thực hiện dễ dàng hơn nhiều bằng cách sử dụng các lệnh gọi chọn tiêu chuẩn.