游标学习

发布时间 2023-05-26 02:43:32作者: 瓜王

游标学习

针对结果集,逐条访问,本质是指针

  • 静态:结果集不变 消耗资源少
  • 动态:在使用游标时,若游标对数据库做了增删改操作改变了原始数据,结果集也会发生改变。 消耗资源多
  • 只进:不能倒回去读,只进不退。更改后不能再回去读取,提取后不可更改。 消耗资源少。

游标的生命周期:声明-打开-读取数据-关闭游标-释放游标

以下的SQL代码演示了只进游标。首先,定义一个游标,然后打开它。接着,声明变量来存储查询结果,并使用FETCH NEXT命令逐行读取游标结果。在读取每一行数据时,还可以对其进行修改。最后,关闭游标并释放内存。

Begin:

Execute this:

--1.Definition
DECLARE metatype_cursor cursor local 
FOR
SELECT Id,Name,CreatedDate FROM OperationsDB.EmailNotification.Metatypes
where id>0
--2. Open
OPEN metatype_cursor
--3.where to store the data
DECLARE @varMetatype cursor, @id int,@name varchar(50),@createdate datetime
set @varMetatype=metatype_cursor
--4.Read data (keywords:next, prior,first,last,absolute,relative)
FETCH NEXT FROM @varMetatype into @id,@name,@createdate
WHILE @@FETCH_STATUS=0 --0 if executing successfully,-1 if fail
BEGIN
   PRINT cast(@id as varchar)+','+@name;
	 if @id=2
	 Update OperationsDB.EmailNotification.Metatypes set Name='name3-changed' where Id=3
	 if @id=4
	 Update OperationsDB.EmailNotification.Metatypes set Name='name4-changed' where Id=3
	 FETCH NEXT FROM @varMetatype into @id,@name,@createdate
END
--5.Close
CLOSE metatype_cursor
--6.Free
DEALLOCATE metatype_cursor

After: