查询并修改:由传入值获取多个条目,删除;并修改与这些条目相关的其他条目

flykobesummer 2009-03-21 10:40:57
我的需求是这样的:
1、比如传入a,b,c三个值

select p,o,u from table wher a=@a and b=@b and c=@c (多个条目)

2、对于每个条目,删除,并且:
update table_other set c=c-1 where p=@p and u=@u
update table set o=o-1 where p=@p and u=@u and o>@o

也就是说,由传入值,获取到待删除条目的一些信息,然后根据这些信息,再修改其他条目。

请问怎样用存储过程实现呢?

多谢大家!
...全文
50 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdhdy 2009-03-21
  • 打赏
  • 举报
回复
不用游标用什么呢?
flykobesummer 2009-03-21
  • 打赏
  • 举报
回复
多谢啦!! 我先用了您上面说的

[Quote=引用 3 楼 ks_reny 的回复:]
引用 2 楼 flykobesummer 的回复:
多谢! 但是这种loop的方式效率如何?我要处理的是约有百万到千万条数据的数据库,但是这个操作不会太频繁


引用 1 楼 ks_reny 的回复:
SQL codecreateprocmyproc@avarchar2(10),@bvarchar2(10),@cvarchar2(10)asbegindeclare@pvarchar2(10)declare@ovarchar2(10)declare@uvarchar2(10)declaretest_curCursorforselectp,o,ufromtablewher a=@aandb=@bandc=@copentest_curFetchNextFromtes…
[/Quote]
ks_reny 2009-03-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 flykobesummer 的回复:]
多谢! 但是这种loop的方式效率如何?我要处理的是约有百万到千万条数据的数据库,但是这个操作不会太频繁


引用 1 楼 ks_reny 的回复:
SQL codecreateprocmyproc@avarchar2(10),@bvarchar2(10),@cvarchar2(10)asbegindeclare@pvarchar2(10)declare@ovarchar2(10)declare@uvarchar2(10)declaretest_curCursorforselectp,o,ufromtablewher a=@aandb=@bandc=@copentest_curFetchNextFromtest_curinto@p,@o,@uWHILE@@FETCH_ST…
[/Quote]
遊標的效率本來就很低,不知道你的那幾張表有什麽關聯嗎? 如果有關聯可以用關聯來更新.
flykobesummer 2009-03-21
  • 打赏
  • 举报
回复
多谢! 但是这种loop的方式效率如何?我要处理的是约有百万到千万条数据的数据库,但是这个操作不会太频繁


[Quote=引用 1 楼 ks_reny 的回复:]
SQL codecreateprocmyproc@avarchar2(10),@bvarchar2(10),@cvarchar2(10)asbegindeclare@pvarchar2(10)declare@ovarchar2(10)declare@uvarchar2(10)declaretest_curCursorforselectp,o,ufromtablewher a=@aandb=@bandc=@copentest_curFetchNextFromtest_curinto@p,@o,@uWHILE@@FETCH_STATUS=0beginupdatetable_othersetc=c-1wherep=@pandu=@uupdatetableseto=o-1wherep=@pandu=@uando>@oFetchNextFromtest_curinto@p,@o,@uendClo…
[/Quote]
ks_reny 2009-03-21
  • 打赏
  • 举报
回复

create proc myproc
@a varchar2(10),
@b varchar2(10),
@c varchar2(10)
as
begin
declare @p varchar2(10)
declare @o varchar2(10)
declare @u varchar2(10)
declare test_cur Cursor for
select p,o,u from table wher a=@a and b=@b and c=@c
open test_cur
Fetch Next From test_cur into @p,@o,@u
WHILE @@FETCH_STATUS = 0
begin
update table_other set c=c-1 where p=@p and u=@u
update table set o=o-1 where p=@p and u=@u and o>@o
Fetch Next From test_cur into @p,@o,@u
end
Close test_cur
Deallocate test_cur

end;

27,580

社区成员

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

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