游標,如果是之前給我說這個概念,我的腦子有二個想法: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
