游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果
每个游标区都有一个名字
用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理
主语言是面向记录的,一组主变量一次只能存放一条记录
仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求
嵌入式SQL引入了游标的概念,用来协调这两种不同的处理方式
游标作用,其实和循环差不多,就是你把数据放在游标里面,然后使用游标一行一行的取得数据。
最终达到循环处理数据的目的。
就是循环对一组数据进行操作的时候的一种手段
ps:游标的效率向来是受争议的,建议1000条以上的数据循环操作时尽量避免使用
--以下为例子
--声明变量
DECLARE @vendor_id int, @vendor_name nvarchar(50),
@message varchar(80), @product nvarchar(50)
--声明游标,select的结果就会放在游标中了
DECLARE vendor_cursor CURSOR FOR
SELECT VendorID, Name
FROM Purchasing.Vendor
WHERE PreferredVendorStatus = 1
ORDER BY VendorID
--打开游标
OPEN vendor_cursor
--取下一条数据,因为游标打开以后,默认的指针是在第一条前面的
--这个语句的意思是把第一条记录中的数据拿出来,并赋值给之前声明的变量
FETCH NEXT FROM vendor_cursor
INTO @vendor_id, @vendor_name
--如果取数据成功,则....
--这里的while是一个循环,用来遍历整个游标
WHILE @@FETCH_STATUS = 0
BEGIN
--这个地方就是写处理过程的,这里只是些了几个无关紧要的语句
PRINT ' '
SELECT @message = '----- Products From Vendor: ' + @vendor_name
PRINT @message
--取下一条
FETCH NEXT FROM vendor_cursor
INTO @vendor_id, @vendor_name
END
--关闭并释放游标
CLOSE vendor_cursor
DEALLOCATE vendor_cursor