- 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