다음을 통해 공유


sp_describe_cursor_tables(Transact-SQL)

서버 커서가 참조하는 개체 또는 기본 테이블을 보고합니다.

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

구문

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

  • [ @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은 ODBC 응용 프로그램에 의해 열린 API 서버 커서의 이름일 수 있으며 그런 다음 SQLSetCursorName을 호출하여 커서를 명명할 수 있습니다. global_cursor_name은 nvarchar(128)입니다.

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

반환 코드 값

없음

반환되는 커서

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

다음 표에서는 sp_describe_cursor_tables에 의해 반환된 커서의 형식을 보여 줍니다.

열 이름

데이터 형식

설명

table owner

sysname

테이블 소유자의 사용자 ID입니다.

Table_name

sysname

개체 또는 기본 테이블의 이름입니다. SQL Server에서 서버 커서는 항상 기본 테이블이 아닌 사용자 지정 개체를 반환합니다. SQL Server 2000에서 WITH VIEW_METADATA를 사용하여 뷰 또는 함수를 만들지 않으면 서버 커서는 기본 테이블을 반환합니다.

Optimizer_hints

smallint

다음 중 하나 이상으로 구성된 비트맵입니다.

1 = 행 수준 잠금(ROWLOCK)

4 = 페이지 수준 잠금(PAGELOCK)

8 = 테이블 잠금(TABLOCK)

16 = 배타적 테이블 잠금(TABLOCKX)

32 = 업데이트 잠금(UPDLOCK)

64 = 잠금 없음(NOLOCK)

128 = 빠른 첫째 행 옵션(FASTFIRST)

4096 = DECLARE CURSOR(HOLDLOCK)와 함께 사용된 경우 반복적인 의미 체계를 읽습니다.

여러 가지 옵션이 제공되는 경우 시스템은 가장 제한적인 것을 사용합니다. 단, sp_describe_cursor_tables는 쿼리에서 지정된 플래그를 표시합니다.

lock_type

smallint

해당 커서의 기초가 되는 각 기본 테이블에 대해 명시적 또는 암시적으로 요청된 스크롤 잠금 유형입니다. 이 값은 다음 중 하나일 수 있습니다.

0 = 없음

1 = 공유

3 = 업데이트

server_name

sysname, nullable

테이블이 있는 연결된 서버의 이름입니다. OPENQUERY 또는 OPENROWSET가 사용된 경우에는 NULL입니다.

Objectid

int

테이블의 개체 ID입니다. OPENQUERY 또는 OPENROWSET가 사용된 경우에는 0입니다.

dbid

int

테이블이 있는 데이터베이스의 ID입니다. OPENQUERY 또는 OPENROWSET가 사용된 경우에는 0입니다.

dbname

sysname, nullable

테이블이 있는 데이터베이스의 이름입니다. OPENQUERY 또는 OPENROWSET가 사용된 경우에는 NULL입니다.

주의

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

사용 권한

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

다음 예에서는 전역 커서를 열고 sp_describe_cursor_tables를 사용하여 커서에 의해 참조되는 테이블을 보고합니다.

USE AdventureWorks
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR KEYSET FOR
SELECT LastName
FROM Person.Contact
WHERE LastName LIKE 'S%'

OPEN abc
GO
-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor_tables.
DECLARE @Report CURSOR

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

-- Fetch all the rows from the sp_describe_cursor_tables 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_tables.
CLOSE @Report
DEALLOCATE @Report
GO

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