| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 965 人关注过本帖, 1 人收藏
标题:关于触发器插入编号的问题
只看楼主 加入收藏
冰雪之源
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-2-18
收藏(1)
 问题点数:0 回复次数:4 
关于触发器插入编号的问题
关于触发器的一个问题
我有这样的一张“类别”表
create table sort(
sort_no numeric(3),
sort_name varchar(20),
constraint pk_sort primary key(sort_name)
);
两个字段:序号各类别名
问题就是当我插入新的类别时,让这个新类别的序号直接填补缺的序号,比如现在表中只为序号为1,3两个序号的分类,当新插入类别时,它的序号为2,再插入新类别时,其序号为4,本人写了如下的触发器:
create trigger tr_no
on sort
  instead of insert
as
declare
        @sort_name varchar(20),
        @sum int,
        @i int,
        @str varchar(5)
  select @sort_name=sort_name from inserted
  select @sum=max(sort_no) from sort
   select @i=1
  while @i<(@sum+1)
     begin
         select @str=sort_name from sort where sort_no=@i
         if @str=''or @str=null
           begin
             insert into sort(sort_no,sort_name)values(@i,@sort_name)
             break
           end
         else
           begin
               select @i=@i+1
            end
         
      end
编译没什么问题,但是就是插入不了数据进来,请哪位高手帮忙看一下!
搜索更多相关主题的帖子: 触发器 
2008-09-23 17:38
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
收藏
得分:0 
create trigger tr_no
on sort
  instead of insert
as
declare
        @sort_name varchar(20),
        @sum int,
        @i int,
        @str varchar(5)
  select @sort_name=sort_name from inserted
  select @sum=max(sort_no) from sort
   select @i=1
  while @i<(@sum+1)
     begin
         select @str=sort_name from sort where sort_no=@i
         if @str=''or @str is null
           begin
             insert into sort(sort_no,sort_name)values(@i,@sort_name)
             break
           end
         else
           begin
               select @i=@i+1
            end
         
      end

[[it] 本帖最后由 师妃暄 于 2008-9-23 17:55 编辑 [/it]]

有实力才会有魅力 实力来自坚持不懈的努力
2008-09-23 17:48
球球
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:1146
专家分:265
注 册:2005-11-28
收藏
得分:0 
向妃子学习。

好累
2008-09-23 18:26
冰雪之源
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-2-18
收藏
得分:0 
谢谢侠女的指教,这个问题已经解决,还发现当表中没有记录时仍会出现不能插入现象,现改程序后解决问题,代码与大家分享如下:
create trigger tr_no
on sort
  instead of insert
as
declare
        @sort_name varchar(20),
        @sum int,
        @i int,
        @str varchar(5)
  select @sort_name=sort_name from inserted
  select @sum=max(sort_no) from sort
     if @sum=0 or @sum='' or @sum is null      
        select @i=1  
      else
        begin
              select @i=1
            while @i<(@sum+1)
              begin
               select @str=sort_name from sort where sort_no=@i
               if @str=''or @str is null
                 break
               else
                 select @i=@i+1    
                end   
         end
  insert sort values(@i,@sort_name)
2008-09-23 21:03
冰雪之源
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-2-18
收藏
得分:0 
好像还是有点问题,不能达到意想的效果,每次增加一个新记录序号只增加在后面,没有填补空缺序号,唯一只有当1号空缺时才能填补,搞不懂是怎么回事
2008-09-26 21:38
快速回复:关于触发器插入编号的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018109 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved