sp_describe_cursor(Transact-SQL)
적용 대상: SQL Server
서버 커서의 특성을 보고합니다.
구문
sp_describe_cursor
[ @cursor_return = ] cursor_return OUTPUT
, [ @cursor_source = ] { N'local' | N'global' | N'*cursor_source*' }
, [ @cursor_identity = ] N'cursor_identity'
[ ; ]
인수
[ @cursor_return = ] cursor_return OUTPUT
커서 출력을 받을 선언된 커서 변수의 이름입니다. @cursor_return 기본값이 없는 int 형식의 OUTPUT 매개 변수이며 호출될 때 sp_describe_cursor
커서와 연결해서는 안 됩니다. 반환된 커서는 스크롤 가능한 동적 읽기 전용 커서입니다.
[ @cursor_source = ] { N'local' | N'global' | N'cursor_source' }
로컬 커서의 이름, 전역 커서 또는 커서 변수를 사용하여 보고되는 커서를 지정할지 여부를 지정합니다. @cursor_source 기본값이 없는 nvarchar(30)입니다.
[ @cursor_identity = ] N'cursor_identity'
문으로 만든 커서의 이름입니다 DECLARE CURSOR
. @cursor_identity nvarchar(128)이며 기본값은 없습니다.
커서에 키워드가
LOCAL
있거나 기본값LOCAL
인 경우 @cursor_identity .local
커서에 키워드가
GLOBAL
있거나 기본값GLOBAL
인 경우 @cursor_identity .global
@cursor_identity ODBC 애플리케이션에서 연 다음 호출SQLSetCursorName
을 통해 이름을 지정하는 API 서버 커서의 이름일 수도 있습니다.그렇지 않으면 @cursor_identity 열린 커서와 연결된 커서 변수의 이름입니다.
반환 코드 값
없음
반환된 커서
sp_describe_cursor
는 Transact-SQL cursor
출력 매개 변수에 결과 집합을 캡슐화합니다. 이렇게 하면 Transact-SQL 일괄 처리, 저장 프로시저 및 트리거가 출력을 한 번에 한 행씩 사용할 수 있습니다. 이는 또한 데이터베이스 API 함수에서 프로시저를 직접 호출할 수 없음을 의미합니다. 출력 매개 변수는 cursor
프로그램 변수에 바인딩되어야 하지만 데이터베이스 API는 바인딩 cursor
매개 변수 또는 변수를 지원하지 않습니다.
다음 표에서는 .를 사용하여 sp_describe_cursor
반환되는 커서의 형식을 보여 줍니다. 커서의 형식은 .를 사용하여 sp_cursor_list
반환된 형식과 동일합니다.
열 이름 | 데이터 형식 | 설명 |
---|---|---|
reference_name |
sysname | 커서를 지칭할 때 사용하는 이름입니다. 문에 지정된 이름을 통해 커서를 DECLARE CURSOR 참조한 경우 참조 이름은 커서 이름과 같습니다. 변수로 커서를 참조하는 경우 변수 이름이 참조 이름이 됩니다. |
cursor_name |
sysname | 문의 커서 이름입니다 DECLARE CURSOR . 커서 변수를 커서로 설정하여 커서를 만든 경우 커서 변수 cursor_name 의 이름을 반환합니다. 이전 버전의 SQL Server에서 이 출력 열은 시스템에서 생성된 이름을 반환합니다. |
cursor_scope |
tinyint | 1 = LOCAL 2 = GLOBAL |
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 참조하세요. |
fetch_status |
smallint | 이 커서의 마지막 인출 상태입니다. 자세한 내용은 @@FETCH_STATUS 참조하세요.0 = 페치 성공.-1 = 페치에 실패했거나 커서의 범위를 벗어났습니다.-2 = 요청된 행이 없습니다.-9 = 커서에서 인출이 발생하지 않았습니다. |
column_count |
smallint | 커서 결과 집합의 열 수입니다. |
row_count |
decimal(10,0) | 커서의 마지막 작업의 영향을 받는 행 수입니다. 자세한 내용은 @@ROWCOUNT 참조하세요. |
last_operation |
tinyint | 커서에서 마지막으로 수행된 작업:0 = 커서에서 작업이 수행되지 않았습니다.1 = OPEN 2 = FETCH 3 = INSERT 4 = UPDATE 5 = DELETE 6 = CLOSE 7 = DEALLOCATE |
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 AdventureWorks2022;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR STATIC FOR
SELECT LastName
FROM Person.Person;
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