CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

请教:insert触发器问题

楼主cjjll(潇潇风雨)2006-03-14 18:02:39 在 MS-SQL Server / 基础类 提问

表a有一个唯一主键为Pid  
  现在想通过触发器在insert   时候将该字段值自动增长1  
   
  不想用自增长ID;  
  不知到能否实现,如果能该如何实现??? 问题点数:50、回复次数:9Top

1 楼huailairen(流浪猫--很想养只猫,带着它到处流浪。)回复于 2006-03-14 19:23:43 得分 10

可以啊  
  create   table   autoadd(a   char(5),b   varchar(5))  
  --drop   table   autoadd  
   
  --drop   trigger   tr_autoadd  
  go  
  create   trigger   tr_autoadd    
  on   autoadd  
  instead   of   insert  
  as    
  begin    
  declare   @m   varchar(5)  
  declare   @n   int  
  --select   *   from   inserted  
  select   @m=b   from   inserted  
  if   (select   count(*)   from   autoadd)=0  
  begin  
   
  insert   into   autoadd   values('00001',@m)  
  end  
  else  
  begin  
  select   @n=max(cast(a   as   int))+1   from   autoadd  
   
  insert   into   autoadd   values(replicate('0',5-len(cast(@n   as   varchar(5))))+cast(@n   as   varchar(5)),@m)  
  end  
  if   @@error<>0    
  begin  
  rollback   tran    
  end    
  endTop

2 楼wgsasd311(自强不息)回复于 2006-03-14 19:36:34 得分 10

现在想通过触发器在insert   时候将该字段值自动增长1  
  =======>如果一次性插入一批数据呢?Top

3 楼zjcxc(邹建)回复于 2006-03-14 20:08:40 得分 20

create   trigger   tr_insert   on   你的表  
  instead   of   insert                                           --   注意触发器类型  
  as  
  if   @@rowcount   =   0   return  
  select   *   into   #   from   inserted  
  declare   @pkid   int  
  select   isnull(max(pid),0)   from   你的表  
  update   #   set   pid=@pkid,   @pkid=@pkid+1  
  insert   你的表   select   *   from   #Top

4 楼wgsasd311(自强不息)回复于 2006-03-14 20:36:10 得分 0

--老大的方法可以处理批量插入,但忘了给变量赋值  
  create   trigger   tr_insert   on   你的表  
  instead   of   insert                                           --   注意触发器类型  
  as  
  if   @@rowcount   =   0   return  
  select   *   into   #   from   inserted  
  declare   @pkid   int  
  select   @pkid=isnull(max(pid),0)   from   你的表  
  update   #   set   pid=@pkid,   @pkid=@pkid+1  
  insert   你的表   select   *   from   #  
  Top

5 楼Anders_lt(突破渴望)回复于 2006-03-14 20:56:11 得分 0

markTop

6 楼mm2love2zz(never stop.)回复于 2006-03-15 00:25:29 得分 5

create   trigger   tr_insert   on   tb  
  for   insert  
  as  
  begin  
  declare   @num   int,@pid   int  
  select   @num=count(pid)   from   tb  
  if   @num=0  
    begin  
      update   inserted   set   pid=1  
    end  
  else  
    begin  
      select   @pid=max(pid)   from   tb  
      update   inserted   set   pid=@pid+1  
    end  
  end   if  
  select   into   tb   from   inserted  
  end  
  goTop

7 楼scmail81(琳·风の狼(修罗))回复于 2006-03-15 08:32:07 得分 5

create   table   A  
  (  
        pid   int,  
        T_Test   varchar(10)  
  )  
   
   
  CREATE   TRIGGER   TEMP_SC   on   A  
  INSTEAD   OF   Insert  
  as  
        declare   @MAx   int  
        declare   @T   table   (id   int   IDENTITY   (1,1)NOT   NULL,T_Test   varchar(10))  
        insert   @T   select   T_Test   from   inserted    
        select   @MAx=isnull(max(pid),0)   from     A  
        insert   A   select   id+@MAx,T_Test   from   @TTop

8 楼cjjll(潇潇风雨)回复于 2006-03-15 09:21:47 得分 0

楼上都是牛人:看了应该没得问题,准备领分吧Top

9 楼zjdyzwx(十一月猪)回复于 2006-03-15 10:25:04 得分 0

CREATE   TABLE   TEMP5  
  (  
        ID   INT,  
        NAME   VARCHAR(8)  
  )  
   
   
  ALTER   TRIGGER   TEMP5I   ON   TEMP5  
  INSTEAD   OF   INSERT  
  AS                                                                                                                  
  BEGIN                                                    
        DECLARE   @I   INT                                                    
   
        SELECT   @I   =   COUNT(*)   FROM   TEMP5        
        WHERE   1   =   1    
         
        SELECT   @I   =@I   +   1          
   
        INSERT   INTO   TEMP5    
        SELECT   @I   ,   NAME     FROM   INSERTED  
  END    
   
  Top

相关问题

  • Insert 触发器
  • 关于insert触发器
  • insert触发器问题
  • 关于insert触发器的问题??
  • 关于view上的INSTEAD OF INSERT 触发器
  • 关于insert触发器的问题
  • 触发器insert事件报错
  • 关于beofre insert的触发器
  • 请教触发器insert的问题
  • ▲触发器能阻止INSERT吗?

关键词

  • 触发器
  • autoadd
  • pkid
  • intselect
  • pid
  • 表
  • inserted
  • trigger tr
  • 增长
  • cast

得分解答快速导航

  • 帖主:cjjll
  • huailairen
  • wgsasd311
  • zjcxc
  • mm2love2zz
  • scmail81

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo