복붙노트

[SQL] SQL 서버 커서에서 여러 값을 가져옵니다

SQL

SQL 서버 커서에서 여러 값을 가져옵니다

나는 내가 한 번에 처리하고 싶다고 찾아온다 행에서 여러 열이 포함 된 커서를 가지고있다. 내가 커서 그들을 한 번에 스칼라 값 하나에 커서에서 특정 열을 할당 보여 사용하는 방법에보고 한 사례의 대부분을 통지 한 후 다음 행으로 이동

EG

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @name  

WHILE @@FETCH_STATUS = 0  
BEGIN  
       --Do Stuff with @name scalar value, then get next row from cursor

       FETCH NEXT FROM db_cursor INTO @name  
END

그것은 다음과 같은 일을 할 수 있다면 내가 알고 싶은 것은 :

    OPEN db_cursor  
    FETCH NEXT FROM db_cursor; 

    WHILE @@FETCH_STATUS = 0  
    BEGIN  
           SET @myName = db_cursor.name;
           SET @myAge = db_cursor.age;
           SET @myFavoriteColor = db_cursor.favoriteColor;
           --Do stuff with scalar values

           FETCH NEXT FROM db_cursor; 
    END

도움말은 항상 감사합니다.

해결법

  1. ==============================

    1.이 작업을해야합니다 :

    이 작업을해야합니다 :

    DECLARE db_cursor CURSOR FOR SELECT name, age, color FROM table; 
    DECLARE @myName VARCHAR(256);
    DECLARE @myAge INT;
    DECLARE @myFavoriteColor VARCHAR(40);
    OPEN db_cursor;
    FETCH NEXT FROM db_cursor INTO @myName, @myAge, @myFavoriteColor;
    WHILE @@FETCH_STATUS = 0  
    BEGIN  
    
           --Do stuff with scalar values
    
           FETCH NEXT FROM db_cursor INTO @myName, @myAge, @myFavoriteColor;
    END;
    CLOSE db_cursor;
    DEALLOCATE db_cursor;
    
  2. ==============================

    2.@@ FETCH_STATUS를 사용하지 마십시오 -이 현재 연결에서 마지막 커서에서 상태를 반환합니다. 아래의 예를 사용합니다 :

    @@ FETCH_STATUS를 사용하지 마십시오 -이 현재 연결에서 마지막 커서에서 상태를 반환합니다. 아래의 예를 사용합니다 :

    declare @sqCur cursor;
    declare @data varchar(1000);
    declare @i int = 0, @lastNum int, @rowNum int;
    set @sqCur = cursor local static read_only for 
        select
             row_number() over (order by(select null)) as RowNum
            ,Data -- you fields
        from YourIntTable
    open @cur
    begin try
        fetch last from @cur into @lastNum, @data
        fetch absolute 1 from @cur into @rowNum, @data --start from the beginning and get first value 
        while @i < @lastNum
        begin
            set @i += 1
    
            --Do your job here
            print @data
    
            fetch next from @cur into @rowNum, @data
        end
    end try
    begin catch
        close @cur      --|
        deallocate @cur --|-remove this 3 lines if you do not throw
        ;throw          --|
    end catch
    close @cur
    deallocate @cur
    
  3. from https://stackoverflow.com/questions/4974981/get-multiple-values-in-sql-server-cursor by cc-by-sa and MIT license