Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.29;
Скачать: CL | DM;

Вниз

Триггер   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
1-96222
ev
2003-09-15 20:05
2003.09.29
самостоятельная прорисовка TListView


1-96236
Toxa
2003-09-17 11:24
2003.09.29
Как можно отловить нажатие мыши на компоненте TSplitter?


14-96396
il_
2003-09-10 11:19
2003.09.29
Как вы относитесь к Fox Pro


7-96462
Nevermind
2003-07-15 08:43
2003.09.29
Стили оформления (XP, Классический)


3-96113
BorisSV
2003-09-10 14:27
2003.09.29
Про TDBGrid.DataSource