다음을 통해 공유


sp_describe_cursor(Transact-SQL)

서버 커서의 특성을 보고합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

sp_describe_cursor [ @cursor_return = ] output_cursor_variable OUTPUT 
     { [ , [ @cursor_source = ] N'local'
    , [ @cursor_identity = ] N'local_cursor_name' ] 
   | [ , [ @cursor_source = ] N'global'
    , [ @cursor_identity = ] N'global_cursor_name' ] 
   | [ , [ @cursor_source = ] N'variable'
     , [ @cursor_identity = ] N'input_cursor_variable' ] 
     } 

인수

  • [ @cursor_return = ] output_cursor_variable OUTPUT
    커서 출력을 받기 위해 선언된 커서 변수의 이름입니다. output_cursor_variable은 cursor이며 기본값은 없습니다. 또한 sp_describe_cursor가 호출된 시점에서는 어떤 커서와도 연결되지 않아야 합니다. 반환되는 커서는 스크롤할 수 있으며 동적인 읽기 전용 커서입니다.

  • [ @cursor_source = ] { N'local' | N'global' | N'variable' }
    보고할 커서를 로컬 커서, 전역 커서 또는 커서 변수의 이름 중 어느 것을 사용하여 지정할지를 결정합니다. 매개 변수는 nvarchar(30)입니다.

  • [ @cursor_identity = ] N'local_cursor_name' ]
    LOCAL 키워드를 갖거나 LOCAL이 기본값인 DECLARE CURSOR 문에 의해 생성된 커서의 이름입니다. local_cursor_name은 nvarchar(128)입니다.

  • [ @cursor_identity = ] N'global_cursor_name' ]
    GLOBAL 키워드를 갖거나 GLOBAL이 기본값인 DECLARE CURSOR 문에 의해 생성된 커서의 이름입니다. global_cursor_name은 nvarchar(128)입니다.

    global_cursor_name은 또한 ODBC 응용 프로그램에서 연 API 서버 커서의 이름일 수 있으며 SQLSetCursorName을 호출하여 명명할 수 있습니다.

  • [ @cursor_identity = ] N'input_cursor_variable' ]
    열린 커서와 연관된 커서 변수의 이름입니다. input_cursor_variable은 nvarchar(128)입니다.

반환 코드 값

없음

반환되는 커서

sp_describe_cursor는 Transact-SQLcursor 출력 매개 변수로 결과 집합을 캡슐화합니다. 이로 인해 Transact-SQL 일괄 처리, 저장 프로시저 및 한 번에 하나의 행만 출력하는 트리거가 허용됩니다. 이는 데이터베이스 API 함수에서 바로 프로시저를 호출할 수 없음을 의미하기도 합니다. cursor 출력 매개 변수는 프로그램 변수에 바인딩되어야 하지만 데이터베이스 API는 cursor 매개 변수 또는 변수 바인딩을 지원하지 않습니다.

다음 표에서는 sp_describe_cursor를 사용하여 반환된 커서의 형식을 보여 줍니다. 커서의 형식은 sp_cursor_list를 사용하여 반환되는 형식과 같습니다.

열 이름

데이터 형식

설명

reference_name

sysname

커서를 지칭할 때 사용하는 이름입니다. DECLARE CURSOR 문에서 지정한 이름으로 커서를 참조하는 경우 참조 이름과 커서 이름이 동일합니다. 변수로 커서를 참조하는 경우 변수 이름이 참조 이름이 됩니다.

cursor_name

sysname

DECLARE CURSOR 문에서 지정된 커서 이름입니다. SQL Server에서 커서 변수를 커서로 설정하여 커서를 만든 경우 cursor_name은 커서 변수의 이름을 반환합니다. 이전 버전의 SQL Server에서 이 출력 열은 시스템 생성 이름을 반환합니다.

cursor_scope

tinyint

1 = 로컬

2 = 전역

status

int

CURSOR_STATUS 시스템 함수가 보고한 것과 동일한 값입니다.

1 = 커서 이름 또는 변수에 의해 참조되는 커서가 열려 있습니다. 커서가 변경 내용을 감지하지 않거나 정적이거나 키 집합인 경우 적어도 한 개 이상의 행이 있습니다. 커서가 동적인 경우 결과 집합에는 0개 이상의 행이 있습니다.

0 = 커서 이름 또는 변수에 의해 참조되는 커서가 열려 있으나 행이 없습니다. 동적 커서는 이 값을 반환하지 않습니다.

-1 = 커서 이름 또는 변수에 의해 참조되는 커서가 닫혀 있습니다.

-2 = 커서 변수에만 적용됩니다. 변수에 할당된 커서가 없습니다. OUTPUT 매개 변수가 커서를 변수에 할당했으나 저장 프로시저가 반환 전에 커서를 닫았을 수 있습니다.

-3 = 지정된 이름의 커서 또는 커서 변수가 없거나 커서 변수에 할당된 커서가 없습니다.

model

tinyint

1 = 변경 내용 미감지(또는 정적)

2 = 키 집합

3 = 동적

4 = 빠른 전진

concurrency

tinyint

1 = 읽기 전용

2 = 스크롤 잠금

3 = 낙관적

scrollable

tinyint

0 = 전진 전용

1 = 스크롤 가능

open_status

tinyint

0 = 닫힘

1 = 열림

cursor_rows

decimal(10,0)

결과 집합에서 한정하는 행 수입니다. 자세한 내용은 @@CURSOR_ROWS(Transact-SQL)를 참조하십시오.

fetch_status

smallint

해당 커서의 마지막 인출 상태입니다. 자세한 내용은 @@FETCH_STATUS(Transact-SQL)를 참조하십시오.

0 = 인출 성공입니다.

-1 = 인출이 실패하였거나 커서의 범위 밖입니다.

-2 = 요청된 행이 누락되었습니다.

-9 = 커서에 대한 인출이 없습니다.

column_count

smallint

커서 결과 집합 내의 열 수입니다.

row_count

decimal(10,0)

커서의 마지막 작업에 의해 영향을 받는 행 수입니다. 자세한 내용은 @@ROWCOUNT(Transact-SQL)를 참조하십시오.

last_operation

tinyint

커서에서 수행된 마지막 작업입니다.

0 = 커서에서 작업이 수행되지 않았습니다.

1 = 열기

2 = 인출

3 = 삽입

4 = 업데이트

5 = 삭제

6 = 닫기

7 = 할당 취소

cursor_handle

int

서버 범위에서 고유한 커서의 값입니다.

주의

sp_describe_cursor는 스크롤 및 업데이트 허용 여부 등과 같은 서버 커서에 대한 전역 특성을 설명합니다. 커서가 반환한 결과 집합의 특성 설명을 보려면 sp_describe_cursor_columns를 사용합니다. 커서가 참조하는 기본 테이블의 보고서를 보려면 sp_describe_cursor_tables를 사용합니다. 연결 시 표시될 Transact-SQL 서버 커서의 보고서를 가져오려면 sp_cursor_list를 사용합니다.

DECLARE CURSOR 문에서 SQL Server가 DECLARE CURSOR에 포함된 SELECT 문으로 지원할 수 없는 커서 유형을 요청하는 경우가 있습니다. SQL Server는 이 커서를 SELECT 문을 사용하여 지원할 수 있는 유형으로 암시적으로 변환합니다. DECLARE CURSOR 문에 TYPE_WARNING이 지정된 경우 SQL Server는 응용 프로그램에 변환이 완료되었다는 정보 메시지를 전달합니다. 그런 다음 sp_describe_cursor를 호출하여 구현된 커서의 유형을 결정할 수 있습니다.

사용 권한

public 역할의 멤버 자격이 필요합니다.

다음 예에서는 전역 커서를 열고 sp_describe_cursor를 사용하여 커서의 특성에 대해 보고합니다.

USE AdventureWorks;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR STATIC FOR
SELECT LastName
FROM Person.Contact

OPEN abc

-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor.
DECLARE @Report CURSOR

-- Execute sp_describe_cursor into the cursor variable.
EXEC master.dbo.sp_describe_cursor @cursor_return = @Report OUTPUT,
        @cursor_source = N'global', @cursor_identity = N'abc'

-- Fetch all the rows from the sp_describe_cursor output cursor.
FETCH NEXT from @Report
WHILE (@@FETCH_STATUS <> -1)
BEGIN
    FETCH NEXT from @Report
END

-- Close and deallocate the cursor from sp_describe_cursor.
CLOSE @Report
DEALLOCATE @Report
GO

-- Close and deallocate the original cursor.
CLOSE abc
DEALLOCATE abc
GO