背景:
其实《再看数据库》系列博客本没有计划写这么多,但最近确实接触数据库比较多,又接触了这些东西,在之前很少用到,因此就整理下,和大家分享.
简介:
游标,是一个数据缓冲区,用来存放SQL语句的执行结果.与一般的执行过程不同的是,游标是从结果集中每次提取一条记录.
与关系数据库的区别:
关系数据库——面向集合,一般执行结果都是一个集合,如果要选择其中一条或几条记录,就要用where子句。
游标 ——面向单条记录。游标可以对查询语句返回的结果集中的每一行进行相同或不同的操作。
因此说,
游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。
类型:
三种游标类型,包括:Transact_SQL游标,API服务器游标和客户游标。
服务器游标(后台游标)
1)Transact_SQL游标
主要在SQL脚本、存储过程、触发器中使用,不支持提取数据块或多行数据。
一般用在服务器上,由从客户端发送给服务器的SQL语句或批处理、存储过程、触发器中的Transact_SQL进行管理。
2)API服务器游标
主要用在服务器上,户端应用程序调用API 游标函数,MS SQL SEVER 的OLE DB提供者、ODBC驱动器或DB_library 的动态链接库(DLL) 都会将这些客户请求传送给服务器以对API游标进行处理。
客户端游标(前台游标)
3)客户游标
客户游标主要是当在客户机上缓存结果集时才使用。在客户游标中,有一个缺省的结果集被用来在客户机上缓存整个结果集。客户游标仅支持静态游标而非动态游标。
由于服务器游标并不支持所有的Transact-SQL语句或批处理,所以客户游标常常仅被用作服务器游标的辅助。因为在一般情况下,服务器游标能支持绝大多数的游标操作。
举例:
数据库表中的记录如下:
--定义游标 DECLARE cursor_Test CURSOR SCROLL FOR SELECT FirstName,MiddleName,LastName FROM AdventureWorksDW2012.dbo.DimCustomer --打开游标 OPEN cursor_Test --声明变量 DECLARE @test1 VARCHAR(10) DECLARE @test2 VARCHAR(10) DECLARE @test3 VARCHAR(10) --取第一行记录 FETCH FIRST FROM cursor_Test INTO @test1,@test2,@test3 PRINT @test1 PRINT @test2 PRINT @test3 --取下一行记录 FETCH NEXT FROM cursor_Test INTO @test1,@test2,@test3 PRINT @test1 PRINT @test2 PRINT @test3 --关闭游标 CLOSE cursor_Test DEALLOCATE cursor_Test执行结果:
总结:
不怕不知道,就怕不知道。有了游标,可以省去很多繁琐的工作,不再需要地手动一个一个的去对每行记录进行操作,节省了很多的工作时间。