首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

看小弟我写的这个触发器

2012-01-28 
看我写的这个触发器刚用这玩意 大家看看效率上行不CREATETRIGGERctrl_hl_emboxONdbo.hl_emboxFORINSERTASd

看我写的这个触发器
刚用这玩意 
大家看看效率上行不
CREATE   TRIGGER   ctrl_hl_embox   ON   dbo.hl_embox
FOR   INSERT
AS
declare   @uid   int
while   (select   count(id)   from   hl_embox)   > 10
begin
              select   @uid   =   [uid]   from   inserted
              delete   from   hl_embox   where   id   =   (select   min(id)   from   hl_embox   where   uid=@uid)
              if   (select   count(id)   from   hl_embox)   <=10
break
            else
              continue
end

[解决办法]
浪费,把那个IF判断给去了,本来查询一次数据库就行了,因为WHILE那儿已经判断了一次了,当不是大于10的时候就会自己停掉了,再加这个IF就是多余了,纯粹是增加服务器的负担,多查询了一次。

还有一个问题就是,如果新插入的记录里的UID在表里没有这些数据,那记录数就会一直大于10,就成了死循环了。

还有就是在统计的时间,你用的count(id)会起什么作用,count(id)和count(*)有区别嘛?难道这个表里总共只会有10条数据?

热点排行