cursor(游标)

游标是系统为用户开设的一个数据缓冲区,存放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



猜你喜欢

转载自blog.csdn.net/qq_41797451/article/details/80218849