兰保明

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

create TRIGGER [dbo].[OnInsert] ON  [dbo].[Lock] after insert
AS
begin

 declare @i int
    set @i=0
    select @i=count(*) from [dbo].[Lock],inserted where Lock.SN=inserted.SN and Lock.IsLock='T'
    if(@i<>0)
    begin
       ROLLBACK TRANSACTION
    end

end

上述触发器的目的是在表Lock中插入一条数据时检测表中是否有和插入数据的SN号相同且IsLock为T的记录,如果有就回滚插入

如果没有就插入,但是,测试发现,无论数据库中有没有记录,都插入失败,经过一分析发现是判断条件出现了逻辑错误

在触发器运行之前,表中已有了改条记录,所以判断条件应该改为如下:

ALTER TRIGGER [dbo].[OnInsert] ON  [dbo].[Lock] after insert
AS
begin

 declare @i int
    set @i=0
    select @i=count(*) from [dbo].[Lock],inserted where Lock.SN=inserted.SN and Lock.IsLock='T'
    if(@i>1)
    begin
       ROLLBACK TRANSACTION
    end

end

这样才达到了逻辑目的

posted on 2011-07-29 12:11  兰保明  阅读(1599)  评论(0编辑  收藏  举报