选择条件触发

时间:2014-09-23 10:48:27

标签: sql-server triggers sql-insert

我想创建一个在插入时不执行插入的触发器 对于第2列已存在于表中,表中第1列的值与第1列插入的值不同。 我已经完成了

create trigger tr1
 on dbo.table
 after insert, update
 as
 begin 
  declare @col1 varchar(20)
  declare @col2 varchar(20)

 if ( 
  exists(
   select column2 from table
   where column2='@col2'
        ) 
  and @col1 <> select column1 from table
  where column2='@col2'
    )
 begin
  RAISERROR('Error', 16, 1);
  ROLLBACK
 end
end

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你要做的事情但是使用TRIGGERS检查现有值的简单方法是使用事务表。

  • 插入UPDATE和INSERT
  • 已删除DELETE

1

create table some_table(col1 int , col2 int)
go

2

create trigger tr1 on dbo.some_table after insert, update
as
begin 
    declare @cnt int 

    select 
        @cnt = count(*) 
    from some_table as t
    inner join inserted as i on t.col1 = i.col1 and t.col2 = i.col2

    if isnull(@cnt,0) > 1
    begin
      RAISERROR('Error', 16, 1);

      ROLLBACK
    end
end

3

insert into some_table(col1, col2) values(1,2)
go
insert into some_table(col1, col2) values(2,3)
go
--HERE the trigger will crash
insert into some_table(col1, col2) values(1,2)
go

我个人更喜欢UNIQUE INDEX方法:)