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

Откуда:
Сообщений: 397
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64) Apr 22 2011 19:23:43 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

здравствуйте, помогите плз разобраться почему не срабатывает триггер на update

ALTER TRIGGER [dbo].[TemraSensorDataNotif_alter]
   ON  [dbo].[TemraSensorData_Notification]
   AFTER INSERT,update
AS 
BEGIN

  SET NOCOUNT ON;

if not exists (select * from deleted)
begin  
  update t
    set id_sensor   = A.id_sendor
       ,Sensor_Type = A.Type
  from  m2..TemraSensorData_Notification t 
  join (select i.id
              ,case when ISNULL(i.id_sensor,0) = 0 then sm.id_sendor else i.id_sensor end as id_sendor
              ,case when ISNULL(i.id_sensor,0) = 0 then sm.Type else i.Sensor_Type end as Type            
      from inserted i
           left join Reports..Shop_Mesto_Sensor (nolock) sm 
           on sm.ShopNo=i.ShopNo and sm.sensor_name like RTRIM(ltrim(i.Name_sensor))
     )A on t.id = A.id
end

  insert into _M(id, id_sensor1)
  select id, id_sensor
  from inserted
END


Суть в том, что данные попадают в m2..TemraSensorData_Notification и затем, если id_sensor is null or = 0, тогда это значение берется из таблицы Reports..Shop_Mesto_Sensor. Я получаю на каждую вставку значений 2 значения в таблице _M (1 на insert и 1 на update)
Все так и работает, но есть некоторые записи (редкие), по которым я в таблице _M получаю только одну запись на Insert (т.е. триггер на update не срабатывает). Причем после, я делаю update вручную

update TemraSensorData_Notification
set id_sensor = id_sensor
where id in('8EDB1A4D-D1DD-4421-ABD5-878F7416753C')

и данные заносятся. Почему так происходит? что я упустил?
нашел похожую проблему, но мне его решение не подходит (если я все правильно понял):
http://www.cyberforum.ru/sql-server/thread1335905.html
1 мар 18, 13:18    [21228242]     Ответить | Цитировать Сообщить модератору
 Re: не срабатывает триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Sandist,

если это не update тогда делать update?
if not exists (select * from deleted)
1 мар 18, 13:26    [21228278]     Ответить | Цитировать Сообщить модератору
 Re: не срабатывает триггер  [new]
Sandist
Member

Откуда:
Сообщений: 397
TaPaK,

если мы вставляем данным, тог да после мы их обновляем.. все верно
1 мар 18, 14:09    [21228474]     Ответить | Цитировать Сообщить модератору
 Re: не срабатывает триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Sandist
TaPaK,

если мы вставляем данным, тог да после мы их обновляем.. все верно

ну ещё раз перечитайте, что написано
1 мар 18, 14:37    [21228620]     Ответить | Цитировать Сообщить модератору
 Re: не срабатывает триггер  [new]
Sandist
Member

Откуда:
Сообщений: 397
TaPaK,

не понимаю...
Если данные вставляются (т.е. табла deleted пустая), то мы делаем update
но... вставка в таблицу _M не входит в этот кусок... она не зависит от этого условия
1 мар 18, 15:27    [21228868]     Ответить | Цитировать Сообщить модератору
 Re: не срабатывает триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Sandist,

я так понимаю включена рекурсия?
m2 - ? так же хоть база?

что даёт
SELECT * FROM sys.objects WHERE Name = 'TemraSensorData_Notification'


ну и то пишите владельца, то не пишите
1 мар 18, 15:43    [21228953]     Ответить | Цитировать Сообщить модератору
 Re: не срабатывает триггер  [new]
Sandist
Member

Откуда:
Сообщений: 397
TaPaK,

да, рекурсия... да, база M2, поэтому иногда писал иногда нет (не имеет же вроде значения)

сейчас я разделил триггеры, один поставил на Insert и один на Update отдельно... сейчас вроде все работает как надо... но не могу понять почему так
1 мар 18, 15:54    [21229012]     Ответить | Цитировать Сообщить модератору
 Re: не срабатывает триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Sandist,

скрипт что вернул?
1 мар 18, 15:56    [21229020]     Ответить | Цитировать Сообщить модератору
 Re: не срабатывает триггер  [new]
Sandist
Member

Откуда:
Сообщений: 397
TaPaK,

К сообщению приложен файл. Размер - 29Kb
1 мар 18, 16:01    [21229044]     Ответить | Цитировать Сообщить модератору
 Re: не срабатывает триггер  [new]
Sandist
Member

Откуда:
Сообщений: 397
Sandist,

тестил день и пришел к выводу, что разделение одного триггера на два разных (один на insert и один на update) - решили проблему
2 мар 18, 10:59    [21231487]     Ответить | Цитировать Сообщить модератору
 Re: не срабатывает триггер  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
Sandist,

а почему все это в процедуре не делаете?
2 мар 18, 13:57    [21232300]     Ответить | Цитировать Сообщить модератору
 Re: не срабатывает триггер  [new]
Sandist
Member

Откуда:
Сообщений: 397
Владислав Колосов,

данные попадают из сторонних источников (если идет речь о том, почему сразу не устанавливаются id_sensor)
2 мар 18, 18:37    [21233375]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить