Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Курсор вътре в курсора

Имате различни проблеми. Първо, защо използвате конкретните си стойности @@FETCH_STATUS? Просто трябва да е @@FETCH_STATUS =0.

Второ, вие не избирате вашия вътрешен курсор в нещо. И не мога да се сетя за обстоятелства, при които бихте избрали всички полета по този начин - изпишете ги!

Ето една проба, която трябва да използвате. Folder има първичен ключ „ClientID“, който също е външен ключ за Attend. Просто отпечатвам всички UID на Attend, разбити по 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;

И накрая, СИГУРЕН ли си искате ли да правите нещо подобно в съхранена процедура? Много е лесно да се злоупотребява със запомнените процедури и често отразява проблеми при характеризирането на вашия проблем. Примерът, който дадох, например, може да бъде много по-лесно изпълнен чрез стандартни избирателни повиквания.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Намерете зависимости в SQL Server:sql_expression_dependencies

  2. Използване на резултата от израз (например извикване на функция) в списък с параметри на запомнени процедури?

  3. Нови функции в SQL Server 2017 (Database Engine)

  4. Как да получите локализирано име на група администратори на Windows в Inno Setup?

  5. IN срещу JOIN с големи набори от редове