Форум: "Базы";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];
ВнизТриггер Найти похожие ветки
← →
avch (2003-09-10 12:16) [0]Есть в табл. поле EditDate, что значит дата редактирования записи,
не могу создать тригер AFTER UPDATE и присвоить этому полю системное время...
и еще, как обращааться к новому и старому значению поля в триггере?
Пишу вот так:
CREATE TRIGGER [OnPartnerTypeUpdate] ON [dbo].[PartnerType]
AFTER UPDATE
AS
EditDate = GetDate()
RETURN
выдается ошибка
← →
Nikolay M. (2003-09-10 12:17) [1]inserted.EditDate = GetDate()
> как обращааться к новому и старому значению поля в триггере?
inserted, deleted
← →
Johnmen (2003-09-10 12:25) [2]Триггер д.б. BEFORE UPDATE
← →
Reindeer Moss Eater (2003-09-10 12:36) [3]В триггере AFTER UPDATE делается новый update полей, что вызывает событие AFTER UPDATE. Снова срабатывает триггер в котором снова модифицируется поле и снова возникает событие AFTER UPDATE из-за которого срабатывает триггер в котором .....
← →
stone (2003-09-10 12:38) [4]You can specify one of two options to control when a trigger fires:
AFTER triggers fire after the triggering action (INSERT, UPDATE, or DELETE) and after any constraints are processed. You can request AFTER triggers by specifying either the AFTER or FOR keywords. Because the FOR keyword has the same effect as AFTER, triggers with the FOR keyword are also classified as AFTER triggers.
-- This statement uses the FOR keyword to generate an AFTER trigger.
CREATE TRIGGER TableCUpdateTrig ON TableC
FOR UPDATE
AS ...
← →
Nikolay M. (2003-09-10 12:40) [5]Пардон, поспешил с ответом.
У меня такой тригер описан так:
if not update(modification_date)
begin
UPDATE firm
SET modification_date = getdate()
WHERE id_firm IN (SELECT id_firm FROM inserted)
end
← →
АлексейК (2003-09-10 12:46) [6]В MSSQL нет триггера BEFORE UPDATE, фактически есть два типа триггера
1. Триггер выполняется после (after) вставки записи в таблицу, при этом запись реально в таблице существует (то есть все ограничения целостности ненарушены), но не закомичена.
2. Триггер (instead of). Триггеры этого типа выполнятются взамен пользовательских действий. То есть запрос пользователя не выполняется, а вносятся лишь изменения, осуществляемые в теле триггера.
>Nikolay M. ©
deleted и inserted представляют собой специальные таблицы, а точнее логические структуры, которые сервер создает для каждого триггера. В эти таблицы запрещено вносить изменения, так что они доступны в режиме только для чтения. Это своего рода частичная копия журнала транзакция, представленная в таблином виде для доступа, в которой отображается лишь одна транзакция.
Следовательно inserted.EditDate = GetDate() ошибочная конструкция.
← →
Nikolay M. (2003-09-10 12:52) [7]
> АлексейК (10.09.03 12:46) [6]
Ну, сказал же, что поторопился, сразу давайте все бить лежачего :) И что это за таблицы я прекрасно знаю, но перекосило меня: может человека иногда перекосить?
А правильный ответ я все-таки привел. По крайней мере в том виде, как это реализовано у меня.
← →
Nikky (2003-09-10 14:41) [8]
> Nikolay M. © (10.09.03 12:40) [5]
у вас ошибка здесь:
> WHERE id_firm IN (SELECT id_firm FROM inserted)
in для уникальных ключей использовать глупо, они для того и уникальные индексы, к тому же кластерные
← →
Nikolay M. (2003-09-10 15:14) [9]
> Nikky © (10.09.03 14:41) [8]
> у вас ошибка здесь
Да ну?! И в чем же ошибка?
> in для уникальных ключей использовать глупо, они для того
> и уникальные индексы, к тому же кластерные
Сам-то понял, что сказал? :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c