关于存储过程和游标!

ivy_live521 2002-12-16 03:12:08
怎样在存储过程中调用游标??
能不能给个简单的例子??
谢谢!!^_^
...全文
40 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
seth99 2002-12-17
  • 打赏
  • 举报
回复
my god!!!光标的作者看到了一定会被你气得吐血,现在没空,等有空在解释给你听 @_@
seth99 2002-12-17
  • 打赏
  • 举报
回复
===================================================================
Code:
Create proc dbo.getTzdbh(@myQuery varchar(250)) as

declare @strSQL varchar(250)

set @strSQL='select * from ymj.xmd_bhk where tzdbh like ''%'
set @strSQL=@strSQL+@myQuery+''''
exec @strSQL

return 0

调用:
exec dbo.getTzdbh '0600'
===================================================================
这就是存储过程,将一些SQL组合在一起,完成一个特定的功能,有点像程序里的函数和过程
ivy_live521 2002-12-17
  • 打赏
  • 举报
回复
create procedure sp_bhk
@tzd char(10)
as
declare @ysmc varchar(20),@bh char(10),@cpgg varchar(20)
declare bhk1 cursor scroll
for select tzdbh,ysmc,bh,cpgg from ymj.xmd_bhk where tzdbh like'%'+@tzd+'%'
open bhk1
fetch next from bhk1 into @tzdbh,@ysmc,@bh,@cpgg
while (@@fetch_status=0)
begin
set @tzd=ltrim(rtrim(@tzd))
print "" select tzdbh,ysmc,bh,cpgg from ymj.xmd_bhk where tzdbh=@tzd
end
close bhk1
deallocate bhk1

用这个也可以查出结果,只不过返回的是部分记录,不包括全部!
谁能解释一下?:)
ivy_live521 2002-12-17
  • 打赏
  • 举报
回复
seth99(seth) 谢谢你喽,不过你没有明白我的意思!我当然知道写select进行类似查可以实现,只不过想知道用存储过程怎么实现!刚学,可以理解吧?:)
斑竹的办法当然行的通,所以现在结贴!
seth99 2002-12-17
  • 打赏
  • 举报
回复
j9988(j9988), hbwhwanghua(mikel) 两位老兄,别把人家吓坏了,现在玩计算机的MM越来越少了,再不好好保护一下这样的珍稀,可就要没了 @_@
seth99 2002-12-17
  • 打赏
  • 举报
回复
小姑娘 j9988(j9988)写得应该是你想要得,还有你可以用Like做模糊查询
======================================================
所有包含0600的记录,例如:01MB0600,01M0600B,010600MB
select * from ymj.xmd_bhk where tzdbh like '%0600%'
开始包含0600的,例如: 060001MB,060002MB
select * from ymj.xmd_bhk where tzdbh like '0600%'
结尾包含0600的,例如:01MB0600,02MB0600
select * from ymj.xmd_bhk where tzdbh like '%0600'
======================================================
j9988 2002-12-16
  • 打赏
  • 举报
回复

select * from ymj.xmd_bhk where right(tzdbh,4)='0600'
hbwhwanghua 2002-12-16
  • 打赏
  • 举报
回复
我还真搞不懂你到底想干嘛,用游标拿来输出结果集,犯得着嘛,简直就是浪费资源嘛
不是万不得已就没必要用游标,那不是盏省油的灯啊!!!
ivy_live521 2002-12-16
  • 打赏
  • 举报
回复
如果只要一条记录就不用游标了
关键是想用类似查,返回多条记录
例如:tzdbh 的值有可能是01MB0600、02MB0600、01MJ0600、02MS0600、01MI0600......
我想让它把所有包含‘0600’的记录都显示出来!
j9988 2002-12-16
  • 打赏
  • 举报
回复
create procedure sp_bhk
@tzdbh varchar(15)
as
select top 1 * from ymj.xmd_bhk where tzdbh=@tzdbh order by newid()

j9988 2002-12-16
  • 打赏
  • 举报
回复
唉,小姑娘:
你干脆说白了,要那一条记录,游标不是这种用途的。
游标记录中的值传给变量,然后对变量值进行处理。这上面各位兄弟已经说得很明白了。
ivy_live521 2002-12-16
  • 打赏
  • 举报
回复
兔子兄,我试过了,还是不行!:(
同样提示命令成功执行
可是没有查询结果!
xlhl 2002-12-16
  • 打赏
  • 举报
回复
补充一点
while (@@fetch_status=0)
begin
select tzdbh,ysmc,bh,cpgg from ymj.xmd_bhk where tzdbh=@tzdbh
fetch next from bhk1 into @tzdbh,@ysmc,@bh,@cpgg
end
改为
while (@@fetch_status=0)
begin
set @tzdbh=ltrim(rtrim(@tzdbh))
select tzdbh,ysmc,bh,cpgg from ymj.xmd_bhk where tzdbh=@tzdbh
fetch next from bhk1 into @tzdbh,@ysmc,@bh,@cpgg
end
xlhl 2002-12-16
  • 打赏
  • 举报
回复
create procedure sp_bhk
@tzdbh varchar(15)
as
declare @ysmc varchar(20),@bh char(10),@cpgg varchar(20)
declare bhk1 cursor scroll
for select tzdbh,ysmc,bh,cpgg from ymj.xmd_bhk where tzdbh like'%@tzdbh%'
open bhk1
fetch next from bhk1 into @tzdbh,@ysmc,@bh,@cpgg
while (@@fetch_status=0)
begin
select tzdbh,ysmc,bh,cpgg from ymj.xmd_bhk where tzdbh=@tzdbh
fetch next from bhk1 into @tzdbh,@ysmc,@bh,@cpgg
end
close bhk1
deallocate bhk1
ivy_live521 2002-12-16
  • 打赏
  • 举报
回复
create procedure sp_bhk
@tzdbh varchar(15)
as
declare @ysmc varchar(20),@bh char(10),@cpgg varchar(20)
declare bhk1 cursor scroll
for select tzdbh,ysmc,bh,cpgg from ymj.xmd_bhk where tzdbh like'%@tzdbh%'
open bhk1
fetch next from bhk1 into @tzdbh,@ysmc,@bh,@cpgg
while (@@fetch_status=0)
begin
print "" select tzdbh,ysmc,bh,cpgg from ymj.xmd_bhk where tzdbh=@tzdbh
end
close bhk1
deallocate bhk1

我是这样写的,想实现类似查询
执行后只提示命令成功执行
没有结果显示
哪里不对?:(
wgy2008 2002-12-16
  • 打赏
  • 举报
回复
create proc sp_kk
as
declare cur_kk cursor for
......
ivy_live521 2002-12-16
  • 打赏
  • 举报
回复
这只是定义一个游标呀
怎么实现在存储过程里调用它??
nethero 2002-12-16
  • 打赏
  • 举报
回复
declare af cursor for select id from AAA
open af
fetch next from af into @id
WHILE @@FETCH_STATUS = 0
begin
delete from AAA where id = @id
fetch next from af into @id
end
close af
DEALLOCATE af

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧