这个存储过程怎么写。
这个存储过程怎么写。
楼主wangfeixue()2002-11-22 17:04:00 在 MS-SQL Server / 基础类 提问
有一个表结构如下。ytfwh表
whbh, cbh, sl
int char(10) float(8)
以whbh+cbh作为唯一标识
问题:
(whbh, cbh, sl)//向存储过程添加的参数。不返回结果
1, A0005 10 //或者这条参数是 1, A0005 -10
往ytfwhb表中插入一条上面的这个参数的记录。
如果在ytfwhb中已经存在这条记录, 就更新这条记录的字段+/-sl. 如果不存在。就添加进去(whbh,cbh,sl)。
问题点数:30、回复次数:10Top
1 楼wangfeixue()回复于 2002-11-22 17:24:59 得分 0
可以实现吗?Top
2 楼leimin(黄山光明顶)回复于 2002-11-22 17:31:49 得分 30
create proc usp_addnew
@whbn int,
@cbh char(10),
@sl float(8)
as
declare @rc int
select @rc=0
begin
if not exists (select * from yourtable where whbh=@whbn and cbh=@cbh)
insert into youtable values (@whbn,@cbh,@sl)
else
update yourtable set sl=@sl where whbh=@whbn and cbh=@cbh
select @rc=@@error
if @rc<>0
begin
select @rc=-1
return @rc
end
endTop
3 楼wangfeixue()回复于 2002-11-22 17:34:27 得分 0
select @rc=@@error
if @rc<>0
begin
select @rc=-1
return @rc
end
这是什么意思。是不是表示没有错误。Top
4 楼inalover(奇遇)回复于 2002-11-22 17:38:50 得分 0
@_@ ,来晚了Top
5 楼tj_dns(愉快的登山者)回复于 2002-11-22 17:40:31 得分 0
if @rc<>0:表示有错误。Top
6 楼wangfeixue()回复于 2002-11-22 17:42:06 得分 0
楼上的这位版主大人,我发一下午的消息给你。解决一个问题,你为什么就是不回答我呢? 可是好几百分,我分没了,一下子注册了两个账号。Top
7 楼Haiwer(海阔天空)回复于 2002-11-22 20:19:54 得分 0
leimin(黄山光明顶)的写法有一个小错误 ,我给更正一下:
create proc usp_addnew
@whbn int,
@cbh char(10),
@sl float(8)
as
declare @rc int
select @rc=0
if not exists (select * from yourtable where whbh=@whbn and cbh=@cbh)
insert into youtable values (@whbn,@cbh,@sl)
else
update yourtable
set sl=sl+@sl
where whbh=@whbn and cbh=@cbh
select @rc=@@error
if @rc<>0
select @rc=-1
return @rc
go
呵呵,版主也要上班,不一定在线。而且tj_dns(愉快的登山者) 给你解释了!
Top
8 楼Chiff(~o~)回复于 2002-11-22 22:36:49 得分 0
上面的大版主已经答复你了。我再提供另外一种方法,版主不会24小时在呀
create table ytfwh(whbh int,cbh char(10),sl float(8))
create unique index i_u_ytfwh on ytfwh(whbh,cbh)
---------------------------------------------------------------
create proc MyProc --这是你要的存储过程
@whbh int,
@cbh char(10),
@sl float(10)
as
update ytfwh
set sl = sl + @sl
where whbh = @whbh and cbh = @cbh
if @@rowcount=0 --如果修改的记录数为零,则插入
insert into ytfwh(whbh,cbh,sl)
values(@whbh,@cbh,@sl)
-----------------------------------------------------------------
go
--以下是执行结果:
exec myproc 1,"a",3.25
exec myproc 1,"b",5
exec myproc 1,"a",6
select * from ytfwh
--1 a 9.25
--1 b 5.0
--建议,如果每次只插入一条记录,更好的办法是将这个
--控制建在ytfwh表的触发器里。
----------------------------------------------------------------
create trigger mytrig on ytfwh instead of insert as
update ytfwh
set sl = ytfwh.sl + b.sl
from inserted b
where ytfwh.whbh = b.whbh and ytfwh.cbh = b.cbh
if @@rowcount=0 --如果修改的记录数为零,则插入
insert into ytfwh(whbh,cbh,sl)
select whbh,cbh,sl
from inserted
-----------------------------------------------------------------
--然后直接往该表插入数据就可以了。Top
9 楼wangfeixue()回复于 2002-11-22 22:55:34 得分 0
我是一次只插入一条记录。b表没有whbh这个字段呀, 是用户在combobox动态选择得到的 whbh.再传递过来的。
你在触发器里怎么得到这个参数Top
10 楼Chiff(~o~)回复于 2002-11-22 23:11:35 得分 0
前端工具是什么?
用触发器不用参数呀,你直接在前端工具写insert语句也可以。如果不行就用存储过程吧。Top
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn
