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
这样才达到了逻辑目的
敏于事,慎于言