您的位置:程序门 -> ms-sql server -> 应用实例



大侠帮忙,?????????????????


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


大侠帮忙,?????????????????[已结贴,结贴人:qqliu512]
发表于:2007-05-19 13:44:39 楼主
求一个触发器?    
 
表一:    
id                 名字                                 宝物                     数量    
1                     张三                                 宝物1                     2    
2                     李四                                 宝物2                     9    
3                     王五                                 宝物3                     4    
4                     李六                                 宝物4                     5    
5                     李四                                 宝物5                     9    
 
表二:    
id             攻击者名字                 使用宝物名        
1                 李四                                         宝物2    
2                 李四                                         宝物2    
3                 李四                                         宝物5    
4                 李六                                         宝物4    
5                 王五                                         宝物3    
 
要求:     当删除表二中的记录的时候,把表一中对应玩家的宝物归还(修改),如果表一中对应玩家的宝物没有,则插入一条记录    
这样的删除触发器(表二里的)怎么写?    
发表于:2007-05-19 13:56:451楼 得分:0
看下边的例子,当表2删除时找到其删除记录的记录信息,剩下的就按照正常情况处理了.

create   trigger   r11del   on   r11
for   delete
as
begin
  delete   from   r12   where   id   in   (select   id   from   deleted)
end
go

发表于:2007-05-19 14:15:292楼 得分:0
楼上,你好像没有理解我的意思

发表于:2007-05-19 14:23:303楼 得分:0
需要用游标,因为李4有两个同样的记录
create   trigger   a   on   表二   after   delete   as
    declare   b   cursor   for   select   *   from   deleted
    open   b
        declare   @data1   varchar(10),@data2   varchar(10),@data0   int
        fetch   next   from   b   into   @data0,@data1,@data2
        if   not   exists(select   1   from   表一   where   表一.名字=@data1   and   表一.宝物=@data2)
            insert   表一(名字,宝物,数量)   select   @data1,@data2,1  
        else
            update   表一   set   数量=数量+1   where   表一.名字=@data1   and   表一.宝物=@data2
        while(@@fetch_status=0)
        begin
            if   not   exists(select   1   from   表一   where   表一.名字=@data1   and   表一.宝物=@data2)
                  insert   表一(名字,宝物,数量)   select   @data1,@data2,1  
            else
                  update   表一   set   数量=数量+1   where   表一.名字=@data1   and   表一.宝物=@data2
        end
close   b
deallocate   b
发表于:2007-05-19 14:47:404楼 得分:20
sorry   有问题现更正
create   trigger   tri_aaa   on   表二   after   delete   as
    declare   b   cursor   for   select   *   from   deleted
    open   b
        declare   @data1   varchar(10),@data2   varchar(10),@data0   int
        fetch   next   from   b   into   @data0,@data1,@data2        
        while(@@fetch_status=0)
        begin
            if   not   exists(select   1   from   表一   where   表一.名字=@data1   and   表一.宝物=@data2)
                  insert   表一(名字,宝物,数量)   select   @data1,@data2,1  
            else
                  update   表一   set   数量=数量+1   where   表一.名字=@data1   and   表一.宝物=@data2
            fetch   next   from   b   into   @data0,@data1,@data2
        end
close   b
deallocate   b


快速检索

最新资讯
热门点击