Red*_*wan 27 sql-server database-cursor
我想使用数据库游标; 首先,我需要了解它的用途和语法是什么,以及在哪种情况下我们可以在存储过程中使用它?不同版本的SQL Server是否有不同的语法?
什么时候需要使用?
Jef*_*tin 38
游标是一种通过结果集的行显式枚举的机制,而不是像这样检索它.
然而,尽管对于习惯于编写的程序员来说它们可能更适合使用While Not RS.EOF Do ...
,但是如果可能的话,它们通常是SQL Server存储过程中要避免的 - 如果你可以在不使用游标的情况下编写查询,那么你可以优化器有更好的机会找到快速实现它的方法.
老实说,我从来没有找到一个无法避免的游标的实际用例,除了一些管理任务,例如循环遍历目录中的所有索引并重建它们.我认为它们可能在报告生成或邮件合并中有一些用途,但是在与数据库对话的应用程序中执行类似游标的工作可能更有效,让数据库引擎执行它最擅长的操作 - 设置操作.
小智 16
使用游标是因为在子查询中我们可以逐行获取记录,因此我们使用游标来获取记录
游标示例:
DECLARE @eName varchar(50), @job varchar(50)
DECLARE MynewCursor CURSOR -- Declare cursor name
FOR
Select eName, job FROM emp where deptno =10
OPEN MynewCursor -- open the cursor
FETCH NEXT FROM MynewCursor
INTO @eName, @job
PRINT @eName + ' ' + @job -- print the name
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM MynewCursor
INTO @ename, @job
PRINT @eName +' ' + @job -- print the name
END
CLOSE MynewCursor
DEALLOCATE MynewCursor
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
ROHIT PRG
jayesh PRG
Rocky prg
Rocky prg
Run Code Online (Sandbox Code Playgroud)
小智 8
游标可能用于逐行检索数据.它的作用类似于循环语句(即while或for循环).要在SQL过程中使用游标,您需要执行以下操作:1.Declare定义结果集的游标.2.打开光标以建立结果集.3.根据需要从光标获取数据到局部变量,一次一行.4.完成后关闭光标.
对于前:
declare @tab table
(
Game varchar(15),
Rollno varchar(15)
)
insert into @tab values('Cricket','R11')
insert into @tab values('VollyBall','R12')
declare @game varchar(20)
declare @Rollno varchar(20)
declare cur2 cursor for select game,rollno from @tab
open cur2
fetch next from cur2 into @game,@rollno
WHILE @@FETCH_STATUS = 0
begin
print @game
print @rollno
FETCH NEXT FROM cur2 into @game,@rollno
end
close cur2
deallocate cur2
Run Code Online (Sandbox Code Playgroud)