1.游标在数据表没有id(identity(1,1))时好用,但是游标会吃更多的内存,减少可用的并发,占用宽带,锁定资源,当然还有更多的代码量
2.如果能不用游标,尽量不要使用游标,用完用完之后一定要关闭和释放, 尽量不要在大量数据上定义游标,尽量不要使用游标上更新数据
Cursor:Global for--全局游标
Cursor:Local for--局部游标
LOCAL意味着游标的生存周期只在批处理或函数或存储过程中可见
GLOBAL意味着游标对于特定连接作为上下文,全局内有效
- --第一步:声明游标
- declare test_Cursor Cursor scroll for
- select name from dbo.aa
- open test_Cursor--打开游标
- --第二遍执行
- declare @name nvarchar(1000)
- fetch next from test_Cursor into @name--下一行
- select @name
- --第三遍关闭清空游标
- CLOSE test_Cursor--关闭
- DEALLOCATE test_Cursor--清空
- /*只有支持6种移动选项,分别为到第一行(FIRST),
- 最后一行(LAST),下一行(NEXT),上一行(PRIOR),
- 直接跳到某行(ABSOLUTE(n)),
- 相对于目前跳几行(RELATIVE(3))*/
通过游标循环数据
- declare test_Cursor Cursor scroll for
- select id,materialName from dbo.table_1
- open test_Cursor
- declare @c nvarchar(10)
- declare @name nvarchar(1000)
- while @@FETCH_STATUS=0
- begin
- fetch next from test_Cursor into @c,@name
- select @c,@name
- end
- --最后执行
- CLOSE test_Cursor
- DEALLOCATE test_Cursor