Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Триггеры в MsSQL [D7, MSSQL]


Страницы:   1 2

NotGooDP ©   (2006-09-07 13:35:00) 

Здравствуйте!
Подскажите пожалуйста каким образом в триггер можно передать данные о записе редакитруемой в данный момент
т.е.
триггер вызваеться при редактировании записи и в другую таблицу передает данные до начала редактирования


CREATE TRIGGER Bef_Update ON Table_ELD For Update as
INSERT History_Table
VALUES(здесь должны быть данные редактируемой таблицы.,GETDATE ( ), USER)


evvcom   (2006-09-07 16:57:00) [1]

> [26] NotGooDP ©   (07.09.06 16:54)

А, ну да... Запамятовал.


NotGooDP   (2006-09-07 16:55:00) [2]

ЕЩЕ раз всем спасибо )


NotGooDP   (2006-09-07 16:54:00) [3]

просто надо выбирать было из таблизы deleted там и храняться данные которые были до апдейта


NotGooDP   (2006-09-07 16:53:00) [4]

так все вопрос снят !!!
я туплю уже !!!!

> evvcom
ты мне еще выше написал где что храниться !


evvcom   (2006-09-07 16:47:00) [5]

> [23] NotGooDP ©   (07.09.06 16:40)

И?


NotGooDP   (2006-09-07 16:40:00) [6]

У меня должна быть историческая табилца в которую помещаються все действия пользователя


evvcom   (2006-09-07 16:39:00) [7]

> [19] NotGooDP ©   (07.09.06 16:32)

Если триггер, то:
1. триггер before, а не after
2. insert into History_Table (select old.field from inserted new inner join Table_ELD old on old.id = new.id)


NotGooDP   (2006-09-07 16:39:00) [8]

перед !


Ega23   (2006-09-07 16:35:00) [9]


> тогда как мне это сделать с помощью какого механизма ?


Какой механизм? Тебе перед вставкой надо, или после?


NotGooDP   (2006-09-07 16:32:00) [10]

Блин (
тогда как мне это сделать с помощью какого механизма ?


Ega23   (2006-09-07 16:30:00) [11]


> еще один вопрос каким образом вызывать триггер до сохранения
> изменений в таблице ?


Триггер - последний рубеж. Всё делается ПЕРЕД вставкой и никак иначе.


NotGooDP   (2006-09-07 16:30:00) [12]

тогда каким образом можно отключить AFTER


NotGooDP   (2006-09-07 16:29:00) [13]

блин я не прав (


NotGooDP   (2006-09-07 16:27:00) [14]

Все спасибо заработало )))
еще один вопрос каким образом вызывать триггер до сохранения изменений в таблице ?
т.е. по умолчанию он выполняется только после успешного выполнения команды и тем самым заносит в таблицу уже измененные данные, мне надо чтобы в таблицу заносились данные до изменений т.е. команда т.е. видимо надо использовать INSTEAD OF я прав ?


NotGooDP   (2006-09-07 16:17:00) [15]

)))))
спасибо )


evvcom   (2006-09-07 16:12:00) [16]

> [11] NotGooDP ©   (07.09.06 16:00)
> FROM Table_ELD

Блин! Чукча не читатель, чукча писатель? См. [3]:
select field1, getdate(), user from inserted

> какое именно действие выполняеться в данный момент

Если строка попала только в inserted, то insert, если и в inserted, и в deleted, то update, если только в deleted, то delete. Таблицы не пусты могут быть только в триггере, afair.


Ega23   (2006-09-07 16:11:00) [17]


> он мне копирует все строчки из таблицы вместо той, которую
> изменяют в данный момент


Ничего не понял. Переформулируй.


NotGooDP   (2006-09-07 16:00:00) [18]

Кароче я сделал триггер, но он неправильно как то работает!!!
он мне копирует все строчки из таблицы вместо той, которую изменяют в данный момент где я не правилно сделал ????

Create  TRIGGER ELD_Trigger_Update ON Table_ELD For Update as
INSERT INTO History_ELD
SELECT
Persone_ID,
Family_member_ID,
MVD_Unit_Id,
ELD_Status,
ELD_Status_ID,
ELD_Status_Date,
ELD_Payment_Date,
getdate(),
User,
'Редактирование'
FROM Table_ELD


Ega23   (2006-09-07 15:58:00) [19]


> каким образом мне определить какое именно действие выполняеться
> в данный момент удаление или рдактирование


Рекомендую просто два разных триггера создать. Один на Insert, Update, другой - на delete.
А логику - в хранимую процедуру вынести, чтобы 2 раза код не писать.


NotGooDP   (2006-09-07 15:50:00) [20]

спасибо все получилось только еще вопрос
каким образом мне определить какое именно действие выполняеться в данный момент удаление или рдактирование
т.е.

if Update @Action = 'Редактирование'
Else @Action = 'Удаление'

это не верно!


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо