问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

游标的使用示例(2)

发布网友 发布时间:2022-04-08 06:47

我来回答

2个回答

懂视网 时间:2022-04-08 11:08

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

 

游标的使用实例(Sqlserver版本)

标签:

热心网友 时间:2022-04-08 08:16

CREATE proc [dbo].[As_Proc_GetPlanDetail]
(
@ids varchar(max)--
)
as
create table #temp
(
dept varchar(100),
sorttitle varchar(200),
title varchar(200),
spec varchar(50),
model varchar(50),
budget decimal(18,2),
amount int,
sgamount int,
htamount int,
ysamount int,
fenfamount int
)
declare @did varchar(32)
declare @sorttitle varchar(200)
declare @title varchar(200)
declare @spec varchar(50)
declare @model varchar(50)
declare @budget decimal(18,2)
declare @amount int
declare @sgamount int
declare @htamount int
declare @ysamount int--验收数量
declare @fenfamount int--分发数量
declare cursor1 cursor for
select rowid,dbo.clip(ypdept,':',1) from As_year_plan where Charindex(rowid,@ids,0)>0
union
select rowid,dbo.clip(department,':',1) from As_assets_requisition where Charindex(rowid,@ids,0)>0 -----------------------------------------------控制计划
declare @rowid varchar(32)
declare @dept varchar(100)
open cursor1
fetch next from cursor1 into @rowid,@dept
while@@fetch_status=0
begin
declare cursor2 cursor for select a.rowid, b.sorttitle,a.title,a.spec,a.model,a.budget,a.amount from As_assts_planDetai a left join As_assetsSort b on a.sortId=b.rowid whereplanID=@rowid
open cursor2
fetch next from cursor2 into @did, @sorttitle, @title,@spec, @model ,@budget ,@amount
while @@fetch_status=0
begin
select @sgamount= isnull(sum(a.amount),0) from As_assets_buyDetail a inner join As_assets_buy b on a.buyId=b.rowid wherea.planId=@didand b.state=1
--print @did
select @htamount= isnull(sum(a.amount),0) from As_contract_detail a inner join As_stock_contract b on a.contId=b.rowid where b.state=1 and a.bydetId in(
select c.rowid from As_assets_buyDetail c inner join As_assets_buy d on c.buyId=d.rowid wherec.planId=@didand d.state=1)
---验收数量
select @ysamount=count(1) from As_AssetsInfo a inner join As_contract_detail b on a. contractId=b.rowid where b.bydetId in(select rowid from As_assets_buyDetail whereplanId=@did)
--分发数量
select @fenfamount=count(1) from As_AssetsInfo a inner join As_contract_detail b on a. contractId=b.rowid where b.bydetId in(select rowid from As_assets_buyDetail whereplanId=@did) and a.drawState=1
insert into #temp(dept, sorttitle, title , spec, model , budget ,amount,sgamount,htamount, ysamount,fenfamount) values(@dept,@sorttitle, @title , @spec, @model , @budget ,@amount,@sgamount,@htamount,@ysamount,@fenfamount)
fetch next from cursor2 into @did, @sorttitle, @title,@spec, @model ,@budget ,@amount
end
close cursor2 --关闭游标
deallocate cursor2
fetch next from cursor1 into @rowid,@dept
end
close cursor1 --关闭游标
deallocate cursor1 --释放游标
--查询临时表
select * from #temp
详细说明
RS.OPEN SQL,CONN,A,B
参数A为设定游标的类型,其取值为: 0 仅向前游标,只能向前浏览记录,不支持分页、Recordset、BookMark
1 键集游标,其他用户对记录所做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。支持分页、Recordset、BookMark
2动态游标功能最强,但耗资源也最多。用户对记录所做的修改,增加或删除记录都将反映到记录集中。支持全功能浏览。
3静态游标,只是数据的一个快照,用户对记录所做的修改,增加或删除记录都不会反映到记录集中。支持向前或向后移动
参数B为记录集的锁定类型,其取值为:
1 锁定类型,默认的,只读,不能作任何修改
2 当编辑时立即锁定记录,最安全的方式
3 只有在调用Update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等
4 当编辑时记录不会被锁定,而更改、插入和删除是在批处理方式下完成的
打开数据记录集方法其实不止一种,但是我们用的最多的就是
rs.open sql,1,1的方法,可是后面的数字参数很多人不解其意,下面我们来介绍一下。
其实open方法后面有多个参数
CursorType LockType CommandType
比如 rs.open sql,1,1
也可以写成
rs.cursorType = 1
rs.LockType = 1
rs.open sql
其中CursorType代表从一个表或者一个SQL查询结果返回的记录。
这个参数有四个值分别是:
adOpenForwardOnly 表示只允许在记录集内的记录间往前移动。这个是缺省值。
adOpenKeyset 反映由其它用户所做的对记录的改变或者删除动作,但并不反映由其它用户做作的添加新记录的动作。
adOpenDynamic 反映由其它用户所做的对记录的改变或者删除动作,包括添加的新记录
adOpenStatic 不反映其它用户对记录所做的修改,添加,删除动作。
这四个值VBSCRIPT预定义位
adOpenForwardOnly = 0
adOpenKeyset = 1
adOpenDynamic = 2
adOpenStatic = 3
lockType 表示当打开记录集时,数据提供者用于锁定数据库的类型:
adLockReadOnly 数据不能改变,这是缺省值!
adLockPessimistic 数据提供者在开始编辑数据的时候锁定记录
adLockOptimistic 仅当调用update方法时,数据提供者锁定记录
adLockBatchOptimistic 用于批处理修改
他们的常量值定义分别是:
adLockReadOnly = 1
adLockPessimistic = 2
adLockOptimistic = 3
adLockBatchOptimistic = 4
rs.open sql,conn,1,1 读取记录 select
rs.open sql,conn,1,3 只更新记录最好 update
rs.open sql,conn,2,3 插入和删除最好 insert delete

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
锅炉切圆直径调整 为什么我打开excel后是灰色的? 有没有什么值得推荐的投资港股的QDII基金? - 知乎 win10电脑屏幕亮度调不了怎么办 考焊工证具体怎么操作 广汽传祺是丰田技术吗 广汽传祺与广汽丰田有关系吗 怎样才能让不愿写作业的孩子听话? 上初中不写作业不想学习的孩子应该如何管教? 出生在2020年农历七月十二日的宝宝怎么取名有内涵? 多哈回合谈判各方呼吁 中国共产主义青年团团歌的具体内容 中国共青团团歌 吐鲁番32团团歌 昨晚梦见炒菜锅着火烧着妈妈的头发了 mac和iphone怎么共享屏幕 ios设备怎样用数据线实现屏幕共享到pc端 求 。。。百度我发现也不灵了 投资100元,七日年化收益率:2.5909%,利息多少 002418股票什么时候开盘 阿玛尼手表换镜面教程 阿玛尼手表ar1704后盖掉了怎么安上 求大神 阿玛尼手表下键不小心拔出来了怎么装? 阿玛尼手表指针掉下来怎么装 阿玛尼手表ar60002后盖怎么盖上? 谁知道这款阿玛尼手表怎么戴呀,好复杂 小孩子晚上睡觉磨牙怎么办 小孩子晚上睡觉老是磨牙怎么办?这是一种病,能治根吗? 孩子晚上睡觉磨牙,白天睡觉却没声,如何戒掉磨牙的习惯? 钢支撑是怎样的?有图片吗?它和满堂脚手架有什么区别???求解-建筑问答-答疑解惑 ... SD敢达,想收集所有是双剑的机体,请列举出来 外墙脚手架与满堂脚手架有什么区别 中国共青团团歌的歌词是什么? 共青团团歌的歌名及歌词 中国共青团团歌歌词 共青团团歌创作日期 团歌是什么歌? 团歌的歌词是什么? 青年团团歌是什么? 中国共青团团歌意义 共青团团歌 共青团团歌在第几次代表大会上确定的?急! 共青团团歌,只唱歌一遍的 谁有共青团团歌 下载照片上马赛克处理器 有对图片打马赛克的手机软件吗,安卓系统的 Video Enhancer马赛克去除工具1.9.12您知道哪里下载么 如何下载马赛克 如何去除马赛克,有相应工具或软件吗,若有,请将下载地址也写下,谢谢 看原油用什么软件 美原油在哪里看行情国际原油期货用什么软件交易 下载哪个App可以看到国际油价走势?代码多少?