@thechemis

Как сделать триггер, который не позволит дублировать данные?

Добрый вечер! Необходимо сделать добавление уникальной строки по какому либо полю.
Пишу вот так:
alter trigger Triger1
on Week_Schedule for insert
as
	if @@ROWCOUNT=1
begin
	if exists (
		select *
		from inserted as i, Week_Schedule as w
		where i.Week_Number = w.Week_Number 
	)
	begin
		rollback tran
	print
		'Неделя с таким номером уже существует!'
	end
end

но что то идет не так. При добавлении даже уникальной строки выскакивает предупреждение с текстом моего триггера. Как можно исправить?
  • Вопрос задан
  • 559 просмотров
Пригласить эксперта
Ответы на вопрос 2
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
Необходимо сделать добавление уникальной строки по какому либо полю.
Это делается не триггером, а ограничением (уникальный индекс или CONSTRAINT).
Ответ написан
@art_karetnikov
Лучший мой проект: Мобильный банк Сбербанка РФ.
1. по типу триггера уже сказали. Иначе не так идет то, что строка на момент проверки уже добавлена и, естественно, exists отрабатывает правильно всегда.
2. Триггер выполняется для каждой строки (поэтому-то уникальность и не надо им проверять), отсюда @rowcount = 1 бесполезен.
3. Триггер нужен не на insert, но на insert, update
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы