Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 триггер изменения  [new]
nas111
Member

Откуда:
Сообщений: 14
Добрый день!
помогите пожалуйста, пытаюсь сделать триггер, нужно чтобы если я изменяю строку или удаляю ее записывал ее в таблицу изменений, но почему он записывает в эту же таблицу если я добавляю эту строку?
что здесь не правильно, подскажите пожалуйста
create trigger dbo.History_trigger
on Aktiv
FOR UPDATE, DELETE NOT FOR REPLICATION
as
-- SET NOCOUNT ON добавлен чтобы не было лишних результатов выполнения операции
set NOCOUNT ON;

-- определеяем тип произошедших изменений UPDATE, or DELETE
declare @change_type as varchar(50)
declare @count as int
set @change_type = 'deleted'
select @count = COUNT(*) from INSERTED
if @Count > 0
set @change_type = 'updated'

begin
-- обработка удаления
if @change_type = 'deleted'
begin
insert into History(Change_Type, Kod_Aktiv, name_aktiv, Model_aktiv, Serial_Nomer_aktiv, Inventory_Nomer_aktiv,
Proizvoditel_aktiv, Date_Prinyatiya_Na_Ychet_aktiv,Date_Spisanya_aktiv, kod_Type_Oborydovaniya_aktiv,
Statys_Oborydovaniya_aktiv ,Pravo_Sobstvennosti_aktiv, Materialno_Otvetstvennoe_Lico_aktiv,
Tekyshee_Mestoraspologenie_aktiv ,Mestoraspologenie_Prikrepleniya_aktiv)
select 'deleted',kod, Name, Model, Serial_Nomer, Inventory_Nomer, Proizvoditel, Date_Prinyatiya_Na_Ychet,Date_Spisanya ,
Kod_Type_Oborydovaniya, Statys_Oborydovaniya ,Pravo_Sobstvennosti,Materialno_Otvetstvennoe_Lico,
Tekyshee_Mestoraspologenie,Mestoraspologenie_Prikrepleniya from deleted
end
else
begin
insert into History(Change_Type, Kod_Aktiv, name_aktiv, Model_aktiv, Serial_Nomer_aktiv, Inventory_Nomer_aktiv,
Proizvoditel_aktiv, Date_Prinyatiya_Na_Ychet_aktiv,Date_Spisanya_aktiv, kod_Type_Oborydovaniya_aktiv,
Statys_Oborydovaniya_aktiv ,Pravo_Sobstvennosti_aktiv, Materialno_Otvetstvennoe_Lico_aktiv,
Tekyshee_Mestoraspologenie_aktiv ,Mestoraspologenie_Prikrepleniya_aktiv)
select 'updates',kod, Name, Model, Serial_Nomer, Inventory_Nomer, Proizvoditel, Date_Prinyatiya_Na_Ychet,Date_Spisanya ,
Kod_Type_Oborydovaniya, Statys_Oborydovaniya ,Pravo_Sobstvennosti,Materialno_Otvetstvennoe_Lico,
Tekyshee_Mestoraspologenie,Mestoraspologenie_Prikrepleniya from inserted
end
end
18 июн 15, 09:45    [17785983]     Ответить | Цитировать Сообщить модератору
 Re: триггер изменения  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
nas111
но почему он записывает в эту же таблицу если я добавляю эту строку?
Потому что есть ещё триггер на INSERT?
18 июн 15, 10:03    [17786075]     Ответить | Цитировать Сообщить модератору
 Re: триггер изменения  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Я вот что никак не пойму.
Зачем так извращаться, если всё равно INSERT в разных случаях записывается отдельной инструкцией?
Почему бы просто не сделать два раздельных триггера - на UPDATE и на DELETE?
18 июн 15, 10:07    [17786095]     Ответить | Цитировать Сообщить модератору
 Re: триггер изменения  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32175
nas111
помогите пожалуйста, пытаюсь сделать триггер, нужно чтобы если я изменяю строку или удаляю ее записывал ее в таблицу изменений, но почему он записывает в эту же таблицу если я добавляю эту строку?
УЖе написали, что видимо есть триггер на delete

Тут у вас ещё логика непонятная, если вым не надо писать то, что было при INSERT, то вы не храните начальное значение в таблице.
При @change_type = 'updated' вы сохраняете только новое значение строки, а старое не будет зафиксировано.
Логичнее в триггере на UPDATE, DELETE не делать этого определения типа операции, а писать всегда в историю значение из deleted. А триггер на INSERT не делать. Тогда вы сохраните всю историю изменений.
18 июн 15, 12:14    [17786757]     Ответить | Цитировать Сообщить модератору
 Re: триггер изменения  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32175
alexeyvg
УЖе написали, что видимо есть триггер на delete
То есть на INSERT, конечно
18 июн 15, 13:17    [17787162]     Ответить | Цитировать Сообщить модератору
 Re: триггер изменения  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
alexeyvg
писать всегда в историю значение из deleted. А триггер на INSERT не делать
И всю информацию о том, кто и когда создал запись, хранить в дополнительных полях самой таблицы
18 июн 15, 13:36    [17787259]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить