注册 登录
编程论坛 SQL Server论坛

关于触发器插入编号的问题

冰雪之源 发布于 2008-09-23 17:38, 969 次点击
关于触发器的一个问题
我有这样的一张“类别”表
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
编译没什么问题,但是就是插入不了数据进来,请哪位高手帮忙看一下!
4 回复
#2
师妃暄2008-09-23 17:48
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]]
#3
球球2008-09-23 18:26
向妃子学习。
#4
冰雪之源2008-09-23 21:03
谢谢侠女的指教,这个问题已经解决,还发现当表中没有记录时仍会出现不能插入现象,现改程序后解决问题,代码与大家分享如下:
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)
#5
冰雪之源2008-09-26 21:38
好像还是有点问题,不能达到意想的效果,每次增加一个新记录序号只增加在后面,没有填补空缺序号,唯一只有当1号空缺时才能填补,搞不懂是怎么回事
1