Тригер на обновление

sergo815
Дата: 27.01.2009 11:06:02
Добрый день!
Недавно перешел на MS SQL (по задаче проекта используется MS SQL 2000) и столкнулся со следующей проблемой:
мне необходимо создать триггер, который будет срабатывать при обновлении 2-х полей в таблице, триггер должен сделать insert в другую таблицу значения этих 2-х полей предшествующих обновлению + ключевое поле (вообщем ведение истории обновлений).
До этого я писал под Oracle и Interbase там было как то попроще new.поле и old.поле а как это обстоит в Ms SQL я не могу разобраться.
Glory
Дата: 27.01.2009 11:07:49
В MSSQL есть виртуальные таблицы inserted и deleted, которые соответсвуют вашим new. и old.
Все это описано в хелпе в статье CREATE TRIGGER
tpg
Дата: 27.01.2009 11:08:27
Виртуальные таблицы inserted, deleted.
проходящий.
Дата: 27.01.2009 11:08:44
sergo815
там было как то попроще new.поле и old.поле

А здесь соответственно inserted.поле и deleted.поле
sergo815
Дата: 27.01.2009 11:14:18
Всем большое спасибо!
просто в книжке которая у меня в руках про триггеры написано крайне скудно
думаю что тему можно закрывать
AnarAlizadeh
Дата: 27.01.2009 14:31:35
Сделай триггер на апдейт, лично бы сделал ИНСТЕАД ОФФ АПДЕЙТ
поймай с таблицы 1 измененные данные:
declare @IDcol, @Col1 (type), @col2 (type)
select @IDcol = ID, @col1 = col1, @col2 = col2 from DELETED -- это табл (TABLE1) где произошли изменения

insert into TABLE2 (2col1, 2col2)
values (@Col1, @Col2)

если с клиента посылаешь несколько строк - за раз, то нужен цикл.
ну это легкое решение.
ну а на счет ведения истории (для UnDo например) - есть интересное решение, но очень уж долгое ))
tpg
Дата: 27.01.2009 14:32:33
На кой цикл то?
Glory
Дата: 27.01.2009 14:34:09
AnarAlizadeh
Сделай триггер на апдейт, лично бы сделал ИНСТЕАД ОФФ АПДЕЙТ
поймай с таблицы 1 измененные данные:
declare @IDcol, @Col1 (type), @col2 (type)
select @IDcol = ID, @col1 = col1, @col2 = col2 from DELETED -- это табл (TABLE1) где произошли изменения

insert into TABLE2 (2col1, 2col2)
values (@Col1, @Col2)

если с клиента посылаешь несколько строк - за раз, то нужен цикл.
ну это легкое решение.

Какой цикл нафиг ?
insert into TABLE2 (2col1, 2col2)
select col1, col2 from DELETED
iap
Дата: 27.01.2009 14:36:21
tpg
На кой цикл то?
+106

И вот это
Member
select @IDcol = ID, @col1 = col1, @col2 = col2 from DELETED
просто ужас какой-то.