我想创建一个在插入时不执行插入的触发器 对于第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
答案 0 :(得分:0)
我不确定我是否理解你要做的事情但是使用TRIGGERS检查现有值的简单方法是使用事务表。
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方法:)