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

这样才达到了逻辑目的

相关文章:

  • 2022-12-23
  • 2021-12-23
  • 2021-09-17
  • 2021-08-16
  • 2022-12-23
  • 2021-07-09
  • 2022-12-23
猜你喜欢
  • 2021-07-07
  • 2022-01-22
  • 2022-12-23
  • 2022-12-23
  • 2021-07-22
  • 2021-08-11
  • 2021-06-27
相关资源
相似解决方案