游标的使用实例(Sqlserver版本)
游标,如果是之前给我说这个概念,我的脑子有二个想法:1、你牛;2、我不会
不会不是理由,更不是借口,于是便要学习,本人属性喜欢看代码,不喜欢看书的人,所以嘛,文字对我没有吸引力;闲话少说啊,给大家提供一个我写的例子,先让大家用起来的,并且知道如何用的啊,想要深究,不要问我啊,自己看书去。。。
游标,作为java人员,最好的理解就是java中的List,只是数据库有点懒,没有过多的对他管理,要自己打开,关闭,释放资源而已
Demo1:
declare mycur cursor for ---申明游标mycur select name from t_stu open mycur ---打开游标 ---操作内容 close mycur ---关闭游标 deallocate mycur ---释放资源
上边的一个Demo只是告诉大家游标的一些基本指令,其实没啥用,要在函数中,存储过程中使用游标才真的有用类,接下来,请看Demo2:
-->这个函数主要实现的功能是,传入表名,将该表的所有的列,拼成字符串返回回来。
create function [dbo].[getCols] ( @table_name AS varchar(50) ) RETURNS varchar(2000) AS BEGIN DECLARE @colname VARCHAR(50) DECLARE @typename VARCHAR(50) DECLARE @result varchar(2000) set @result = '' DECLARE mycur CURSOR FOR ---定义游标 select c.name as columnname,ty.name as typename from sys.columns c inner join sys.tables t on t.object_id=c.object_id inner join sys.types ty on ty.system_type_id=c.system_type_id where t.name = @table_name and ty.name !='sysname' ---传入参数@table_name order by t.name,c.column_id OPEN mycur ---打开游标 FETCH NEXT FROM mycur into ----获取下一条数据 @colname,@typename ----将获取的数据保存到变量中 WHILE @@FETCH_STATUS = 0 ----返回上次执行Fetch命令的状态,0:成功 -1:失败 -2:被提取的行不存在 BEGIN if @result = null or @result = '' begin SET @result = @colname end else begin SET @result = @result + ',' + @colname end FETCH NEXT FROM mycur into ---获取下一条数据 @colname,@typename END CLOSE mycur ---关闭游标 DEALLOCATE mycur ----释放资源 RETURN @result END