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

Откуда:
Сообщений: 2
Стоит такая задача, создать триггер, который добавляет сегодняшнюю дату и примечание в личную карточку сотрудника, если на данного сотрудника было добавлено больше 3-х выговоров и потом удаляет эту запись. Вот,что получилось у меня.

CREATE TRIGGER ВЗЫСК2 
   ON  dbo.Взыскания
   AFTER INSERT
AS
BEGIN
	SET NOCOUNT ON;
IF EXISTS(SELECT Л.ТАБ_НОМ 
          FROM dbo.Взыскания В JOIN dbo.Личная_карточка Л ON Л.ТАБ_НОМ=В.ТАБ_НОМ
          WHERE 2<(SELECT count(В.НОМ_ВЗЫСК) FROM INSERTED I JOIN dbo.Взыскания В ON I.ТАБ_НОМ=В.ТАБ_НОМ))
          BEGIN
 UPDATE dbo.Личная_карточка
 SET ДАТА_УВОЛ=GetDate()
 WHERE ТАБ_НОМ=(SELECT Л.ТАБ_НОМ 
          FROM dbo.Взыскания В JOIN dbo.Личная_карточка Л ON Л.ТАБ_НОМ=В.ТАБ_НОМ
          WHERE 2<(SELECT count(В.НОМ_ВЗЫСК) FROM INSERTED I JOIN dbo.Взыскания В ON I.ТАБ_НОМ=В.ТАБ_НОМ))
 BEGIN
 UPDATE dbo.Личная_карточка
 SET ПРИМ='У сотрудника больше 2-х выговоров в личном деле,следовательно он уволен!'
 WHERE ТАБ_НОМ=(SELECT Л.ТАБ_НОМ 
          FROM dbo.Взыскания В JOIN dbo.Личная_карточка Л ON Л.ТАБ_НОМ=В.ТАБ_НОМ
          WHERE 2<(SELECT count(В.НОМ_ВЗЫСК) FROM INSERTED I JOIN dbo.Взыскания В ON I.ТАБ_НОМ=В.ТАБ_НОМ))
 BEGIN
 DELETE FROM dbo.Личная_карточка
 WHERE ТАБ_НОМ=(SELECT Л.ТАБ_НОМ 
          FROM dbo.Взыскания В JOIN dbo.Личная_карточка Л ON Л.ТАБ_НОМ=В.ТАБ_НОМ
          WHERE 2<(SELECT count(В.НОМ_ВЗЫСК) FROM INSERTED I JOIN dbo.Взыскания В ON I.ТАБ_НОМ=В.ТАБ_НОМ))
 END
 END
 END
 END          


Только, как я понял таблица INSERTED не используется в запросах на обновление и удаление, подскажите, что можно сделать.

Сообщение было отредактировано: 4 май 11, 18:00
4 май 11, 17:59    [10606001]     Ответить | Цитировать Сообщить модератору
 Re: Команда UPDATE и DELETE в триггерах  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а зачем сначала чет апдейтись а патом ето же удалять ????
4 май 11, 18:09    [10606071]     Ответить | Цитировать Сообщить модератору
 Re: Команда UPDATE и DELETE в триггерах  [new]
iljy
Member

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

феерично! Добавляем в запись инфу - и тут же эту запись удаляем, класс. Перед прочтением съесть
При изменении inserted используется, при удалении таки нет, используйте deleted.
Ну и так, по мелочи - ТАБ_НОМ=(SELECT Л.ТАБ_НОМ .... запросто свалится с ошибкой при наличии нескольких таких записей. И BEGIN-END зачем столько?
4 май 11, 18:10    [10606087]     Ответить | Цитировать Сообщить модератору
 Re: Команда UPDATE и DELETE в триггерах  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
эка, людей триггерами увольняют :)
4 май 11, 18:12    [10606097]     Ответить | Цитировать Сообщить модератору
 Re: Команда UPDATE и DELETE в триггерах  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
Harmonium
Только, как я понял таблица INSERTED не используется в запросах на обновление и удаление, подскажите, что можно сделать.
Почему не используется, у вас есть, всё правильно.

Только у вас триггер кривой, весь.

Если начать сначала, что должен вернуть запрос
SELECT Л.ТАБ_НОМ 
FROM dbo.Взыскания В 
	JOIN dbo.Личная_карточка Л 
		ON Л.ТАБ_НОМ=В.ТАБ_НОМ
WHERE 2 < (SELECT count(В.НОМ_ВЗЫСК) FROM INSERTED I JOIN dbo.Взыскания В ON I.ТАБ_НОМ=В.ТАБ_НОМ)
И вообще, зачем алиасы таблиц в одном запросе делать одинаковыми, чтобы всё запутать?
4 май 11, 18:15    [10606119]     Ответить | Цитировать Сообщить модератору
 Re: Команда UPDATE и DELETE в триггерах  [new]
Harmonium
Member

Откуда:
Сообщений: 2
После удаления этот сотрудник при помощи другого тирггера занесется в архив,мне нужно чтоб сначала в личную карточку были записаны дата увольнения и примечание,я вот и не знаю как сделать,чтоб именно этому сотруднику сделать записи, то бишь на которого только что было создано 3-е взыскание....
4 май 11, 18:19    [10606150]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить