OPEN (Transact-SQL)

開啟一個 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_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 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;