1.游标是什么
游标是SQL Server的一种数据访问机制,它允许用户访问单独的数据行。用户可以对每一行进行单独的处理,从而降低系统开销和潜在的阻隔情况,用户也可以使用这些数据生成的SQL代码并立即执行或输出。
2.游标的优点
SELECT 语句返回的是一个结果集,但有时候应用程序并不总是能对整个结果集进行有效地处理,游标便提供了这样一种机制,它能从包括多条记录的结果集中每次提取一条记录,游标总是与一跳SQL选择语句相关联,由结果集和指向特定记录的游标位置组成。使用游标具有一下优点:
(1).允许程序对由SELECT查询语句返回的行集中的每一次执行相同或不同的操作,而不是对整个集合执行同一个操作。
(2).提供对基于游标位置中的行进行删除和更新的能力。
(3).游标作为数据库管理系统和应用程序设计之间的桥梁,将两种处理方式连接起来。
3.游标的使用
3.1声明游标
DECLARE 游标名 CURSOR
3.2打开游标
open 游标名
3.3获取游标数据,当游标被打开时,行指针将指向该游标集第1行之前,如果要读取游标集中的第1行数据,必须移动行指针使其指向第1行
FETCH NEXT FROM 游标名
3.4关闭游标/删除游标
CLOSE 游标名 --关闭游标
DEALLOCATE 游标名 --删除游标
3.5操作游标
DECLARE E1cursor cursor --声明游标,默认为FORWARD_ONLY游标
FOR SELECT * FROM c_example
OPEN E1cursor --打开游标
FETCH NEXT from E1cursor --读取第1行数据
WHILE @@FETCH_STATUS = 0 --用WHILE循环控制游标活动
BEGIN
FETCH NEXT from E1cursor --在循环体内将读取其余行数据
END
CLOSE E1cursor --关闭游标
DEALLOCATE E1cursor --删除游标
4.实例一
DECLARE cur_temp_objectid CURSOR FOR
SELECT
ObjectId,
TxCode,
LOP,
CmpTime
FROM #temp_objectid
OPEN cur_temp_objectid
FETCH NEXT FROM cur_temp_objectid INTO
@temp_objectid,
@temp_txcode,
@temp_lop,
@temp_cmptime
WHILE (@@FETCH_STATUS <> -1)
BEGIN
DELETE FROM #temp_wimovements
INSERT INTO #temp_wimovements
SELECT
Object_ID,
......
JobStatus
FROM RPT_WITAT_WIMOVEMENTS (NOLOCK)
WHERE InsTimeStamp <= @temp_cmptime
AND Object_ID = @temp_objectid
END
CLOSE @return_cursor --关闭游标
DEALLOCATE @return_cursor --释放游标
实例二
DECLARE @return_cursor CURSOR --声明游标@return_cursor
DECLARE @temp_error_objectid char(15)
EXEC SP_DEL_ERROR_OBJID
@StartDate,
@EndDate,
@return_cursor OUTPUT --执行其他SP,返回@return_cursor
FETCH NEXT FROM @return_cursor INTO --从@return_cursor获得一个值赋给@temp_error_objectid
@temp_error_objectid
WHILE (@@FETCH_STATUS <> -1) --循环
BEGIN
-- delete error objectId
delete from #temp_objectid where ObjectID = @temp_error_objectid --执行sql
FETCH NEXT FROM @return_cursor INTO --再从@return_cursor获取下一个值重新赋给@temp_error_objectid
@temp_error_objectid
END -- WHILE (@@FETCH_STATUS <> -1)
CLOSE @return_cursor --关闭游标
DEALLOCATE @return_cursor --释放游标
5.参考链接:
SQL Server基础之游标---阿赫瓦里
SQLServer游标(Cursor)简介和使用说明 及全局变量说明和功能---zzy7075