OPEN(Transact-SQL)

DECLARE CURSOR 또는 SET cursor_variable 문에 지정된 Transact-SQL 문을 실행하여 Transact-SQL 서버 커서를 열고 커서를 채웁니다.

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

구문

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }

인수

  • GLOBAL
    cursor_name이 전역 커서를 참조하도록 지정합니다.

  • cursor_name
    선언된 커서의 이름입니다. 동일한 cursor_name을 가진 전역 커서와 로컬 커서가 있는 경우 GLOBAL이 지정되면 cursor_name이 전역 커서를 참조하고 그렇지 않으면 cursor_name 이 로컬 커서를 참조합니다.

  • cursor_variable_name
    커서를 나타내는 커서 변수의 이름입니다.

주의

INSENSITIVE 또는 STATIC 옵션을 사용하여 커서를 선언한 경우 OPEN은 임시 테이블을 만들어 결과 집합을 보관합니다. 결과 집합에 SQL Server 테이블의 최대 행 크기를 초과하는 행이 있으면 OPEN이 실패합니다. KEYSET 옵션을 사용하여 커서를 선언하는 경우에는 OPEN이 임시 테이블을 만들어 키 집합을 보관합니다. 임시 테이블은 tempdb에 저장됩니다.

커서가 열린 후 @@CURSOR\_ROWS 함수를 사용하여 마지막으로 열린 커서에서 한정하는 행 수를 받습니다.

[!참고]

SQL Server에서는 키 집합 커서 또는 정적 Transact-SQL 커서를 비동기식으로 생성할 수 없습니다. OPEN 또는 FETCH 등의 Transact-SQL 커서 작업은 일괄 처리되므로 Transact-SQL 커서를 비동기식으로 생성하지 않아도 됩니다. SQL Server에서는 각 커서 작업의 클라이언트 왕복 때문에 짧은 대기 시간 OPEN이 문제가 되는 비동기 키 집합 기반 또는 정적 API(응용 프로그래밍 인터페이스) 서버 커서를 계속 지원합니다.

다음 예에서는 커서를 열고 모든 행을 인출합니다.

DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM AdventureWorks2012.HumanResources.vEmployee
WHERE LastName like 'B%';

OPEN Employee_Cursor;

FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
    FETCH NEXT FROM Employee_Cursor
END;

CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;

참고 항목

참조

CLOSE(Transact-SQL)

@@CURSOR\_ROWS(Transact-SQL)

DEALLOCATE(Transact-SQL)

DECLARE CURSOR(Transact-SQL)

FETCH(Transact-SQL)