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

Откуда:
Сообщений: 8
Таблицу создаю так:
CREATE TABLE worker (
	id INT NOT NULL CONSTRAINT w_pk PRIMARY KEY IDENTITY,
	fst_name CHAR(25) NOT NULL,
	sec_name CHAR(25) NOT NULL,
	pat_name CHAR(25) NOT NULL,
	hunted   DATETIME NOT NULL DEFAULT GETDATE(),
	fired    DATETIME
);

На нее вешаю триггер:
CREATE TRIGGER checkIfFired
ON worker
FOR UPDATE
AS
DECLARE @oldId INT;
SELECT @oldId = id FROM deleted;
IF ((SELECT fired FROM worker WHERE id = @oldId) != NULL)
BEGIN
	print 'Обновление информации о уволенном работнике невозможно';
	ROLLBACK TRANSACTION
END

Очевидно, сравнение почему-то не отрабатывает, потому что ничего не выводится и данные изменяются.
16 май 14, 12:46    [16026681]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с триггером на UPDATE  [new]
guest1978
Guest
keksuem,

not null, а не != null
16 май 14, 12:48    [16026708]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с триггером на UPDATE  [new]
guest1978
Guest
keksuem,

is not null
16 май 14, 12:49    [16026717]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с триггером на UPDATE  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
keksuem,

ну и говнокод!
Откуда берёте вот эти вот скалярные переменные и заполнение их из целой таблицы deleted?
Правда, интересно. Кто-то подсказал или где-то прочитали?

C псевдотаблицами deleted и inserted надо обращаться
как с самыми обычными таблицами без всяких переменных.
16 май 14, 12:54    [16026758]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с триггером на UPDATE  [new]
keksuem
Member

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

Спасибо, is not null сработало.
16 май 14, 13:40    [16027200]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с триггером на UPDATE  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
keksuem
guest1978,

Спасибо, is not null сработало.
Вы читать-то умеете?
Если проапдейтить сразу две записи таблицы worker, что будет?
16 май 14, 13:42    [16027219]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с триггером на UPDATE  [new]
keksuem
Member

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

Я сначала делал через eleted.id, но давало ошибку:
Сообщение 4104, уровень 16, состояние 1, процедура checkIfFired, строка 7
Не удалось привязать составной идентификатор "deleted.id".
Так что пришлось с переменной извращаться.
16 май 14, 13:43    [16027234]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с триггером на UPDATE  [new]
keksuem
Member

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

Ничего хорошего не будет. Но меня в данном конкретном случае это не волнует.
16 май 14, 13:45    [16027256]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить