tempad
Readygo技术搜索引擎 >>游戏开发 >> 这个存储过程怎么写。

这个存储过程怎么写。

Readygo技术搜索引擎 网络搜索 efish 2008-1-17 2:00:55

这个存储过程怎么写。

楼主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

责任编辑: efish 参与评论 查找更多:
相关文章
dbgrideh的问题请高手们来帮我解决这个问题,很急手。 dbgrideh的问题请高手们来帮我解决这个问题,很急手。
PHP有关下拉列表的问题。 PHP有关下拉列表的问题。
各位不要笑,大侠们帮帮忙解决一下这几个最简单的入… 各位不要笑,大侠们帮帮忙解决一下这几个最简单的入门题
存储过程的问题,返回不了变量.... 存储过程的问题,返回不了变量....
谁帮我看看这行代码 谁帮我看看这行代码
怎么样可以减少flash 的容量??? 怎么样可以减少flash 的容量???
Xmanager 里的字体问题 Xmanager 里的字体问题
提示asp.net版本不对问题 提示asp.net版本不对问题
vb中如何限制鼠标移动?急!! vb中如何限制鼠标移动?急!!
诸位兄弟,本人以前是用VB的,现在想学DELPHI,这里问一… 诸位兄弟,本人以前是用VB的,现在想学DELPHI,这里问一个简单问题
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn

分类导航
Readygo技术搜索引擎