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

Откуда:
Сообщений: 3
Всем привет.
Вопрос может и глупый, но требуется помощь.
Создаю триггер на вставку в таблицу, который проверяет имеется ли у конкретного вставленного id совпадение интервала даты (inserted.[Дата_с] и inserted.[Дата_по]) с датами этого же id, которые уже имеются в таблице.
Если нет, надо выкинуть исключение.
ALTER TRIGGER [dbo].[add_trigger]
ON dbo.Наличие_состояния AFTER INSERT
AS
BEGIN
IF EXISTS (SELECT  Наличие_состояния.ID_персонала, Наличие_состояния.[Дата по], Наличие_состояния.[Дата с]
 FROM Наличие_состояния INNER JOIN
                        inserted ON Наличие_состояния.ID_персонала = inserted.ID_персонала 
                        WHERE (inserted.[Дата с] BETWEEN Наличие_состояния.[Дата с] AND Наличие_состояния.[Дата по])
						OR 
						(inserted.[Дата по] BETWEEN Наличие_состояния.[Дата с] AND Наличие_состояния.[Дата по]))
BEGIN
ROLLBACK TRANSACTION;	
	PRINT 
		'Нельзя установить одному человеку отсутствие по более чем одному событию';
END
END


Исключение теперь выскакивает всегда, при любой вставке в таблице. Подскажите, где ошибка?
11 июн 13, 12:58    [14420032]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с триггером  [new]
Glory
Member

Откуда:
Сообщений: 104751
Stigmat_z
Исключение теперь выскакивает всегда, при любой вставке в таблице. Подскажите, где ошибка?

В данном триггере добавленные записи уже находятся в таблице
Поэтому триггер и называется AFTER INSERT
11 июн 13, 13:00    [14420051]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с триггером  [new]
Stigmat_z
Member

Откуда:
Сообщений: 3
Glory, Спасибо огромное
Вставил INSTEAD OF и все заработала)
11 июн 13, 13:21    [14420195]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с триггером  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Stigmat_z
Вставил INSTEAD OF и все заработала)

И вставка корректных записей тоже происходит?
11 июн 13, 13:39    [14420337]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с триггером  [new]
Stigmat_z
Member

Откуда:
Сообщений: 3
Гость333
Stigmat_z
Вставил INSTEAD OF и все заработала)

И вставка корректных записей тоже происходит?


да, происходит.
сделал явный INSERT, согласно INSTEAD OF
11 июн 13, 14:29    [14420750]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с триггером  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Stigmat_z,

Ну, дело ваше, конечно. Но можно было и имевшийся триггер подправить:
ALTER TRIGGER [dbo].[add_trigger]
ON dbo.Наличие_состояния AFTER INSERT
AS
BEGIN
IF EXISTS (SELECT  Наличие_состояния.ID_персонала, Наличие_состояния.[Дата по], Наличие_состояния.[Дата с]
 FROM Наличие_состояния INNER JOIN
                        inserted ON Наличие_состояния.ID_персонала = inserted.ID_персонала AND Наличие_состояния.PK <> inserted.PK
                        WHERE (inserted.[Дата с] BETWEEN Наличие_состояния.[Дата с] AND Наличие_состояния.[Дата по])
						OR 
						(inserted.[Дата по] BETWEEN Наличие_состояния.[Дата с] AND Наличие_состояния.[Дата по]))
BEGIN
ROLLBACK TRANSACTION;	
	PRINT 
		'Нельзя установить одному человеку отсутствие по более чем одному событию';
END
END

где PK — первичный ключ на таблице.
11 июн 13, 14:36    [14420811]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить