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

Откуда:
Сообщений: 19
Здравствуйте.

Есть две таблицы.
В первую Events постоянно записываются строки (ID,Дата, станция, код).

IDDateTimeComplectID_StationCode
12562019-04-02 14:14:04.6037550000
12552019-04-02 14:14:04.10076 5000
12542019-04-02 14:14:02.81372 30000
12532019-04-02 14:14:01.55375 40000
12522019-04-02 14:14:00.64176 3000


Вторая Station_Status содержит сводную таблицу с параметрами по каждой станции.

Station_IDStatus_FromMachine_Auto
702
713
724
732
741
752
762
.....


После прихода новой строки в первую таблицу должна обновится соответствующая ячейка во второй таблице.

Написал триггер
ALTER TRIGGER [dbo].[TestTriger]
    ON [dbo].[Events]
    for INSERT
    AS
    BEGIN

	DECLARE @Station int; 
	DECLARE @Code int;

 SET @Station =  (SELECT TOP 1  ID_Station FROM Events  order by ID DESC);  
 SET @Code = (SELECT TOP 1  Code FROM Events WHERE ID_Station= @Station order by ID DESC);


    IF (@Code = 20000 or @Code = 0 or @Code = 2000) 
		UPDATE Station_Status SET Status_FromMachine_Auto = 1 WHERE Station_ID = @Station;
    IF (@Code = 50000 or @Code = 1 or @Code = 5000)  
		UPDATE Station_Status SET Status_FromMachine_Auto = 2 WHERE Station_ID = @Station;
    IF (@Code = 40000 or @Code = 2 or @Code = 4000)  
		UPDATE Station_Status SET Status_FromMachine_Auto = 3 WHERE Station_ID = @Station;
	IF ((30000 <= @Code AND @Code  <= 39000) or @Code = 4 or @Code = 3000) 
		UPDATE Station_Status SET Status_FromMachine_Auto = 4 WHERE Station_ID = @Station;
    IF (@Code = 70000 or @Code = 70001 or @Code = 7000 ) 
		UPDATE Station_Status SET Status_FromMachine_Auto = 7 WHERE Station_ID = @Station;

    END


Но он почему то работает не стабильно , некоторые приходящие в первую таблицу строки, не обрабатываются. Хотя в первой таблице присутствуют.

Подскажите, в чем проблема.
2 апр 19, 14:56    [21850133]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36696
yuri7811
Но он почему то работает не стабильно ,

Потому что так написан.

Читать про inserted.
2 апр 19, 14:59    [21850138]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30821
yuri7811
Написал триггер
Вы посмотрите хелп, посмотрите в нём пример написания триггера. У вас просто бред написан, так нельзя делать.
2 апр 19, 15:03    [21850156]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36696
ALTER TRIGGER [dbo].[TestTriger]
    ON [dbo].[Events]
    for INSERT
    AS
    BEGIN

set nocount on

update a set
    a.Station_Status = case
        when (b.code = 20000 or b.code = 0 or b.code = 2000)                           then 1
        when (b.code = 50000 or b.code = 1 or b.code = 5000)                           then 2
        when (b.code = 40000 or b.code = 2 or b.code = 4000)                           then 3
        when ((30000 <= b.code AND b.code  <= 39000) or b.code = 4 or b.code = 3000)   then 4
        when (b.code = 70000 or b.code = 70001 or b.code = 7000 )                      then 7
    end
from        Station_Status  a
inner join  inserted        b on b.Station_ID = a.ID_Station

end


UPD: хотя тут еще поди и группировка/выбор последнего ивента по станции нужно.

Сообщение было отредактировано: 2 апр 19, 15:09
2 апр 19, 15:03    [21850157]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером  [new]
Сруль.
Member

Откуда:
Сообщений: 119
А если в первой таблице кто-то апдейтом поменяет
код станции 75, скажем, на 73.
У вас апдэйт триггер есть в натуре?
Без него двойник во второй таблице не появится.
2 апр 19, 16:04    [21850290]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером  [new]
yuri7811
Member

Откуда:
Сообщений: 19
Гавриленко Сергей Алексеевич, большое спасибо за помощь , разобрался все работает.
3 апр 19, 07:49    [21850838]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить