Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Триггер проверяющий совпадающие записи INSERT  [new]
SoerKosolapiy
Member

Откуда:
Сообщений: 6
Доброго времени суток!
Решил сделать триггер для проверки совпадающих записей:если есть совпадения-отменить вставку и выдать ошибку.
Собственно решил попробовать конструкцию EXISTS т.к. вроде понял как она работает, а оказалось что не понял =)
Есть таблица tblDistrict в каторой имеется два столбца-District (номер района) и Area(название района).Остальные стоблцы нужны для триггера отслеживания авторства.
CREATE TABLE [dbo].[tblDistrict](
	[District] [int] NOT NULL,
	[Area] [nchar](255) NULL,
	[User] [nchar](255) NULL,
	[Host] [nchar](255) NULL,
	[UpdateTime] [datetime] NULL


Сам триггер на вставку:
ALTER TRIGGER [dbo].[CheckExistDisctrict]
ON [dbo].[tblDistrict]
FOR INSERT
AS
IF EXISTS (SELECT tblDistrict.Area FROM tblDistrict INNER JOIN inserted ON tblDistrict.Area = inserted.Area)
BEGIN ROLLBACK;
PRINT 'Такой район уже существует!'
RETURN;
END


При вставки любых названий района (уже существующих или нет) выкидывается сообщения "такой район уже существует". Не могу понять в чём ошибка-то ли я неправильно понял как работает EXISTS то ли не понял что такое таблица inserted. Помогите пожалуйста.
27 май 14, 11:18    [16077864]     Ответить | Цитировать Сообщить модератору
 Re: Триггер проверяющий совпадающие записи INSERT  [new]
Glory
Member

Откуда:
Сообщений: 104751
SoerKosolapiy
При вставки любых названий района (уже существующих или нет) выкидывается сообщения "такой район уже существует".

Потому что триггер срабатывает ПОСЛЕ добаления записи в таблицу
Поэтому ваш EXISTS и находит только что добавленную запись
27 май 14, 11:20    [16077879]     Ответить | Цитировать Сообщить модератору
 Re: Триггер проверяющий совпадающие записи INSERT  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
SoerKosolapiy
Не могу понять в чём ошибка-то
На момент срабатывания триггера, добавляемая строка уже есть в таблице. Поэтому ваш exists всегда exists.

Ну и триггер тут не нужен. Достаточно unique constraint.
27 май 14, 11:21    [16077887]     Ответить | Цитировать Сообщить модератору
 Re: Триггер проверяющий совпадающие записи INSERT  [new]
SoerKosolapiy
Member

Откуда:
Сообщений: 6
Glory, спасибо большое!
27 май 14, 11:22    [16077899]     Ответить | Цитировать Сообщить модератору
 Re: Триггер проверяющий совпадающие записи INSERT  [new]
SoerKosolapiy
Member

Откуда:
Сообщений: 6
invm, спасибо. задание такое просто попалось.
27 май 14, 11:23    [16077906]     Ответить | Цитировать Сообщить модератору
 Re: Триггер проверяющий совпадающие записи INSERT  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
SoerKosolapiy,

если уж обязательно нужен триггер, используйте INSTEAD OF
27 май 14, 13:11    [16078978]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить