游标
1.需求: 话说 唐僧师徒四人,正过大雪山, 唐僧饿了,吩咐悟空去弄斋饭,悟空一个筋斗云飞开了。
突然,大风呼啸,雷鸣闪电,八戒和唐僧在慌乱中被雪山老妖抓走。
沙和尚到处寻找师徒下落无果。无奈之下,去找菩萨。
先前唐僧和八戒受菩萨所托,都带了一个SOS定位手表。
不管在那里,只要发送SOS信号,就可以把当前的经纬度发送给菩萨。
这雪山老妖势力范围大,方圆几百里都是他的妖洞,还真有点能耐, 唐僧和八戒 被这个洞卷到那个洞,
匆匆忙忙的,唐僧和八戒在每个妖洞里,都发送了SOS求救信息。
弄得 菩萨都不知 唐僧的下落,。 现在要你用SQL语句把最新的SOS记录给菩萨看。
每人只需要显示最新的一条SOS信息。
-- SOS求救信息,放在一个叫SOSInfo的表里面。 CREATE TABLE SOSInfo ( LoginID VARCHAR(30) NOT NULL, --用户id 目前规定在6-16个字符之间 PosTime VARCHAR(48) NOT NULL, --采集时间:YYYY-MM-DD HH24:MI:SS Latitude VARCHAR(30) , --纬度 Longitude VARCHAR(30) , --经度 SOSPhone VARCHAR(16) , --sos求救号码 IsCheck INTEGER, --是否已经查看 PRIMARY KEY (LoginID,PosTime) ); --插入几条SOS求救信息 insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) values('沙和尚','2013-04-17 12:11:33','23.2352635','30.2356855','15689584587',0) insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) values('孙悟空','2013-04-17 11:11:33','23.2352635','30.2356855','15689584587',0) insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) values('猪八戒','2013-04-17 10:11:33','23.2352635','30.2356855','15689584587',0) insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) values('猪八戒','2013-04-19 13:11:33','23.2352635','30.2356855','15689584587',0) insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) values('沙和尚','2013-04-17 14:11:33','23.2352635','30.2356855','13689584587',0) insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) values('唐僧','2013-04-17 19:11:33','29.2352635','30.2356855','15789584587',0) insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) values('唐僧','2013-04-17 11:11:33','26.2352635','30.2356855','15789584587',0) insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) values('唐僧','2013-04-17 18:11:33','24.2352635','30.2356855','15789584587',0) --很显然,唐僧和猪八戒 耐不住 寂寞 发 SOS 求救了,但是 被妖怪这个洞搬到那个洞, 经纬度经常改变,让没筋斗云功夫的 沙和尚 很苦恼。 --因为数据要最后一起返回一个DataTable,而不是一个DataSet,所以我们打算用一个表变量 declare @Users table ( LoginID varchar(30) not null, PosTime varchar(48) not null, Latitude varchar(30) null, SOSPhone varchar(16)null, Longitude varchar(30) null, IsCheck int null ); declare @name varchar(50) ; declare my_cursor cursor --定义游标 for (select distinct loginID from sosInfo) --把结果集放到游标中 open my_cursor --打开游标 fetch next from my_cursor into @name;--把第一条数据放到@name变量中 while @@fetch_status=0 begin insert into @users(LoginID, PosTime, Latitude, Longitude, SOSPhone, IsCheck) select top 1 LoginID, PosTime, Latitude, Longitude, SOSPhone, IsCheck from sosinfo where loginid=@name order by postime desc fetch next from my_cursor into @name end select LoginID, PosTime, Latitude, Longitude, SOSPhone, IsCheck from @Users close my_cursor deallocate my_cursor
View Code
1 use myschool 2 select *from student 3 4 declare @userId varchar(50); 5 declare my_cursor cursor--定义游标 6 for (select sid from student)--查出需要的集合放到游标中 7 open my_cursor --打开游标 8 fetch next from my_cursor into @userId;--将读取的第一行数据放到@userId变量中 9 while @@fetch_status =0 10 begin 11 print @userid;--打印数据,打印表中的sid 12 --update student set sbirthday = dateadd(month,6,getdate()) where sid = @userid;--更新数据 13 update student set sage = sage+10 where sid=@userid; 14 fetch next from my_cursor into @userid;--读取下一行数据放到变量中 15 end 16 close my_cursor;--关闭游标 17 deallocate my_cursor 18 go