- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 備份資料庫
- SQL 表格
- SQL - 建立表格
- SQL - 顯示錶格
- SQL - 重命名錶格
- SQL - 截斷表格
- SQL - 克隆表格
- SQL - 臨時表格
- SQL - 修改表格
- SQL - 刪除表格
- SQL - 刪除表格
- SQL - 約束
- SQL 查詢
- SQL - 插入查詢
- SQL - 選擇查詢
- SQL - Select Into
- SQL - Insert Into Select
- SQL - 更新查詢
- SQL - 刪除查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - Where 子句
- SQL - Top 子句
- SQL - Distinct 子句
- SQL - Order By 子句
- SQL - Group By 子句
- SQL - Having 子句
- SQL - AND & OR
- SQL - BOOLEAN (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY, ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - 內連線
- SQL - 左連線
- SQL - 右連線
- SQL - 交叉連線
- SQL - 全連線
- SQL - 自連線
- SQL - 刪除連線
- SQL - 更新連線
- SQL - 左連線 vs 右連線
- SQL - Union vs Join
- SQL 鍵
- SQL - 唯一鍵
- SQL - 主鍵
- SQL - 外部索引鍵
- SQL - 複合鍵
- SQL - 備用鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - 唯一索引
- SQL - 叢集索引
- SQL - 非叢集索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - Min & Max
- SQL - 空函式
- SQL - 檢查約束
- SQL - 預設約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - Group By vs Order By
- SQL - IN vs EXISTS
- SQL - 資料庫調整
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - @@FETCH_STATUS
SQL 的@@FETCH_STATUS 函式用於檢索最近開啟的遊標的當前提取狀態。此函式是非確定性的,並且是應用程式中所有遊標的全域性函式。因為結果是不確定的。
例如,使用者可能會從一個遊標執行 FETCH 語句,然後利用儲存過程來開啟和處理來自另一個遊標的輸出。而不是在呼叫儲存過程之前執行的 FETCH 語句,@@FETCH STATUS 反映了在從呼叫的儲存過程返回控制後在儲存過程中執行的最後一個 FETCH。
SQL @@FETCH_STATUS 函式返回如下所示的整數值 -
| 序號 | 返回值和描述 |
|---|---|
| 1 | 0 表示提取成功。 |
| 2 | -1 -1 |
| 3 | -2 表示提取失敗或行超出結果集。 |
| 4 | -9 -2 |
表示行提取丟失。
-3
@@FETCH_STATUS
表示遊標未執行提取操作。
語法
以下是 SQL @@FETCH_STATUS() 函式的語法 -
引數
CREATE TABLE Workers( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
它不接受任何型別的引數。
INSERT INTO Workers VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ); INSERT INTO Workers VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 ); INSERT INTO Workers VALUES (3, 'kaushik', 23, 'Kota', 2000.00 ); INSERT INTO Workers VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 ); INSERT INTO Workers VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 ); INSERT INTO Workers VALUES (6, 'Komal', 22, 'MP', 4500.00 );
示例
讓我們建立一個名為 Workers 的表,我們將在後續的示例中使用它,使用以下查詢 -
SELECT * FROM Workers;
現在,讓我們使用 INSERT 語句在 Workers 表中插入一些記錄,如下面的查詢所示 -
驗證
+----+----------+-----+-----------+---------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+---------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | +----+----------+-----+-----------+---------+
以下是 SQL @@FETCH_STATUS() 函式的語法 -
讓我們使用以下查詢檢查表是否已成功建立 -
DECLARE Work CURSOR FOR
SELECT Name,Age
FROM Workers;
OPEN Work;
FETCH NEXT FROM Work;
WHILE @@FETCH_STATUS =0
BEGIN
FETCH NEXT FROM Work
END;
現在,讓我們使用 INSERT 語句在 Workers 表中插入一些記錄,如下面的查詢所示 -
輸出
+--------+------+ | Name | Age | +--------+------+ | Khilan | 25 | +--------+------+ +--------+------+ | Name | Age | +--------+------+ |Kaushik | 23 | +--------+------+ +--------+------+ | Name | Age | +--------+------+ |Chaitali| 25 | +--------+------+ +--------+------+ | Name | Age | +--------+------+ | Hardik | 27 | +--------+------+ +--------+------+ | Name | Age | +--------+------+ | Komal | 22 | +--------+------+ +--------+------+ | Name | Age | +--------+------+ | | | +--------+------+
以下是 SQL @@FETCH_STATUS() 函式的語法 -
執行上述查詢後,它將生成如下所示的輸出 -
DECLARE Work CURSOR FOR SELECT null FROM INFORMATION_SCHEMA.TABLES OPEN Work SELECT fetch_status from sys.dm_exec_cursors(@@SPID) WHERE name = 'Work'
現在,讓我們使用 INSERT 語句在 Workers 表中插入一些記錄,如下面的查詢所示 -
輸出
+------------------------------------+ | fetch_status| +------------------------------------+ | -9 | +------------------------------------+
以下是 SQL @@FETCH_STATUS() 函式的語法 -
在以下示例中,我們將使用 while 迴圈來控制使用以下查詢與上面建立的表一起使用的 @@fetch_status 的遊標活動 -
DECLARE @Id int CREATE TABLE Welcome ( Id int not null PRIMARY KEY ) INSERT INTO Welcome (Id) VALUES (1),(2) DECLARE Work CURSOR KEYSET FOR SELECT Id FROM Welcome ORDER BY Id OPEN Work FETCH NEXT FROM Work INTO @Id DELETE FROM Welcome WHERE Id = 2 FETCH NEXT FROM Work INTO @Id SELECT @@FETCH_STATUS as [Fetch_Status] DROP TABLE Welcome CLOSE Work DEALLOCATE Work
現在,讓我們使用 INSERT 語句在 Workers 表中插入一些記錄,如下面的查詢所示 -
當我們執行上述查詢時,輸出如下所示 -
+------------------------------------+ | Fetch_Status| +------------------------------------+ | -2 | +------------------------------------+
以下是 SQL @@FETCH_STATUS() 函式的語法 -
讓我們看看以下示例,我們將使用以下查詢宣告一個包含無列且僅選擇 NULL 的 select 查詢的遊標 -
DECLARE Work CURSOR FOR
SELECT Top 2 Name FROM Workers
OPEN Work
SELECT CURSOR_STATUS('global','Work') AS 'isReady?'
fetch next from Work;
while @@FETCH_STATUS = 1
begin
fetch next from Work;
end
CLOSE Work
SELECT abs(CURSOR_STATUS('global','Work')) AS 'isCursorClosed?'
DEALLOCATE Work
現在,讓我們使用 INSERT 語句在 Workers 表中插入一些記錄,如下面的查詢所示 -
當我們執行上述查詢時,輸出如下所示 -
+-------------------+ | isReady? | +-------------------+ | 1 | +-------------------+ +-------------------+ | Name | +-------------------+ | Ramesh | +-------------------+ +-------------------+ | isCursorClosed? | +-------------------+ | 1 | +-------------------+
讓我們看看以下查詢,我們將建立一個演示表,插入一個值,執行 fetch_status 和 drop 操作,並使用以下查詢檢查結果 -
讓我們看看以下查詢,我們將使用以下查詢執行 fetch_status 並讀取遊標變數中的所有行 -
sql-cursor-functions.htm