OPEN(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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

Transact-SQL 구문 규칙

Syntax

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }  

참고 항목

SQL Server 2014(12.x) 및 이전 버전에 대한 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조 하세요.

인수

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

cursor_name
선언된 커서의 이름입니다. 동일한 cursor_name을 가진 전역 커서와 지역 커서가 있을 경우 GLOBAL이 지정되면 cursor_name은 전역 커서를 참조하고 GLOBAL이 지정되지 않으면 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 AdventureWorks2022.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)