Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Con trỏ bên trong con trỏ

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để truy vấn tất cả các ngày lớn hơn một ngày nhất định trong SQL Server?

  2. Sự cố khi sử dụng tiện ích mở rộng SQL Server 2008 R2 PowerShell bên ngoài SQLPS

  3. MS SQL Server 2005 - Thủ tục được lưu trữ Tự phát ngắt

  4. Làm cách nào để chuyển đổi giá trị hàng thành cột có số cột động?

  5. Tham gia SQL với phạm vi ngày?