![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Триггеры в MsSQL [D7, MSSQL]
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 = 'Удаление'
это не верно!