Для более сложной логики вы используете триггеры: триггер запускается в указанное время (вставка, обновление, удаление) - до (используйте слово «for») или после.
Ваш пример - триггер, который неРазрешить вставку данной комбинации столбцов:
create table MyTable (
Col1 char, Col2 char, Col3 char, Col4 int, Col5 char, Col6 int
);
insert into MyTable (Col1, Col2, Col3, Col4, Col5, Col6)
values ('a', 'b', 'c', 1, 'e', '1');
insert into MyTable (Col1, Col2, Col3, Col4, Col5, Col6)
values ('a', 'b', 'f', 1, 'e', '1');
create trigger [dbo].[trigger_MyTable] on MyTable for insert as
begin
if 0 < (select count(*) from inserted where
Col1='a' and Col2='b' and Col3='c' and Col4=1 and Col6=1)
begin
raiserror 50009 'wrong insert, no way!'
rollback transaction
return
end
end;
-- now it fails
insert into MyTable (Col1, Col2, Col3, Col4, Col5, Col6)
values ('a', 'b', 'c', 1, 'e', '1');
Конечно, вы можете создать триггер для обновления (используйте «вставленную» таблицу) или для удаления (используйте «удаленную» таблицу).Вы можете выполнять другие действия (например, вставлять еще одну строку в другую таблицу), ...
Также попробуйте MSDN: http://msdn.microsoft.com/en-us/library/ms189799(v=SQL.90).aspx