看我写的这个触发器

deninghe 2007-08-09 04:29:22
刚用这玩意 
大家看看效率上行不
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
...全文
140 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
deninghe 2007-08-09
  • 打赏
  • 举报
回复
有道理 谢谢指教
select count(id) from hl_embox 这是忘写条件了
应该是select count(id) from hl_embox where uid = @uid

谢谢了
ayzwd 2007-08-09
  • 打赏
  • 举报
回复
浪费,把那个IF判断给去了,本来查询一次数据库就行了,因为WHILE那儿已经判断了一次了,当不是大于10的时候就会自己停掉了,再加这个IF就是多余了,纯粹是增加服务器的负担,多查询了一次。

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

还有就是在统计的时间,你用的count(id)会起什么作用,count(id)和count(*)有区别嘛?难道这个表里总共只会有10条数据?
deninghe 2007-08-09
  • 打赏
  • 举报
回复
楼下的 别跑!
留下点什么吧
deninghe 2007-08-09
  • 打赏
  • 举报
回复
汗 别光接分啊
kk19840210 2007-08-09
  • 打赏
  • 举报
回复
接分

22,299

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧