SQL的游标
SQL的游标
什么是游标?游标是做什么用的?怎么用?
-----------------------------------------------------------------------------------------------
1,其实Select 返回的结果集是一个数据表视图,这个视图是没有记录指针的,如果要改变其中的值,只能对这个视图中的数据全体改变
游标,本质上就是数据视图的记录指针
如,A表中价格字段中,大于20的全部打9折,小于20的,打8折,怎么办呢?
二种办法
①用DDL语句
Update 菜单 Set 单价=单价*0.8 Where 单价<20
Update 菜单 Set 单价=单价*0.9 Where 单价>20
②用Select 语句采用游标
代码如下
declare @Price Money//定义变量
Declare TheCursor Cursor For Select 单价 From 菜单 For Update Of 单价//这里定义这个游标是在哪个视图上是做什么用的?
Open TheCursor//打开游标
Fetch From TheCursor InTo @Price //取游标中的数据,(取记录指针所指的整条记录)
While @@Fetch_Status =0 //如果记录指针没到尾部
begin
if @Price<20 begin
Update 菜单 Set 单价=@Price*0.8 Where Current Of TheCursor //更新当前记录指针所指的数据
end
if (@Price>20) and (@Price<100) begin
Update 菜单 Set 单价=@Price*0.9 Where Current Of TheCursor
end
Fetch Next From TheCursor InTo @Price//记录指针向下走一行
end
Close TheCursor//关掉记录指针(关闭游标)
DeAllocate TheCursor//释放游标
-------------------------------------------------------------------------------------------------
1,记住,游标是附在数据视图上的,就像记录指针附在数据表视图上一样
2,使用视图是件很麻烦的事情,虽然他一次可以全搞定,而用DDL语句要二次才搞定,其实用DDL语言也可以一次搞定
Update 菜单 Set 单价=单价*0.8 Where 单价 Between 1 and 20 or 单价 between 21 and 100
-------------------------------------
DoubleCat