OPEN(Transact-SQL)
DECLARE CURSOR 또는 SET cursor_variable 문에 지정된 Transact-SQL 문을 실행하여 Transact-SQL 서버 커서를 열고 커서를 채웁니다.
구문
OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }
인수
GLOBAL
cursor_name이 전역 커서를 나타내도록 지정합니다.
cursor_name
선언된 커서의 이름입니다. 동일한 cursor_name을 가진 전역 커서와 로컬 커서가 모두 존재할 경우 GLOBAL이 지정되어 있으면 cursor_name이 전역 커서를 나타내고 그렇지 않으면 로컬 커서를 나타냅니다.
cursor_variable_name
커서를 나타내는 커서 변수의 이름입니다.
주의
INSENSITIVE 또는 STATIC 옵션을 사용하여 커서를 선언한 경우 OPEN은 임시 테이블을 만들어 결과 집합을 보관합니다. 결과 집합에 SQL Server 테이블의 최대 행 크기를 초과하는 행이 있으면 OPEN이 실패합니다. KEYSET 옵션을 사용하여 커서를 선언하는 경우에는 OPEN이 임시 테이블을 만들어 키 집합을 보관합니다. 임시 테이블은 tempdb에 저장됩니다.
커서가 열린 후 @@CURSOR_ROWS 함수를 사용하여 마지막으로 열린 커서에서 한정하는 행 수를 받습니다.
[!참고] SQL Server 2005에서는 키 집합 또는 정적 Transact-SQL 커서를 비동기적으로 생성할 수 없습니다. OPEN 또는 FETCH와 같은 Transact-SQL 커서 작업은 일괄 처리되므로 Transact-SQL 커서를 비동기적으로 생성하지 않아도 됩니다. SQL Server 2005에서는 각 커서 작업의 클라이언트 왕복 때문에 짧은 대기 시간 OPEN이 문제가 되는 비동기 키 집합 기반 또는 정적 API(응용 프로그래밍 인터페이스) 서버 커서를 계속 지원합니다.
예
다음 예에서는 커서를 열고 모든 행을 인출합니다.
DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM AdventureWorks.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)