OPEN (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

開啟 Transact-SQL 伺服器資料指標,並執行 DECLARE CURSOR 或 SET cursor_variable 陳述式上指定的 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 就是全域資料指標;否則,cursor_name 是本機資料指標。

cursor_variable_name
這是參考資料指標之資料指標變數的名稱。

備註

如果是用 INSENSITIVE 或 STATIC 選項來宣告資料指標,OPEN 會建立一份暫存資料表來存放結果集。 當結果集中任何資料列的大小超出 SQL Server 資料表的最大資料列大小時,OPEN 會失敗。 如果是用 KEYSET 選項來宣告資料指標,OPEN 會建立一份暫存資料表來存放索引鍵集。 暫存資料表儲存在 tempdb 中。

在開啟資料指標之後,請利用 @@CURSOR_ROWS 函數來擷取最後開啟的資料指標中,符合的資料列數。

注意

SQL Server 不支援非同步產生索引鍵集驅動的 Transact-SQL 資料指標或靜態的 Transact-SQL 資料指標。 OPEN 或 FETCH 之類的 Transact-SQL 資料指標作業是以批次方式來處理,因此,不需要非同步產生 Transact-SQL 資料指標。 由於用戶端會針對每個資料指標作業而往返運作,SQL Server 仍繼續支援非同步索引鍵集驅動的應用程式開發介面 (API) 伺服器資料指標或靜態的 API 伺服器資料指標,對這些伺服器資料指標而言,低度延遲的 OPEN 是一項需要關切的問題。

範例

下列範例會開啟一個資料指標,且會提取所有資料列。

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)