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

Откуда:
Сообщений: 5
Здравствуйте, не могу понять в чем ошибка.
Логика: если значение >=100, то показатель оптимален, в противном случае наоборот.
Триггер выдает странные значения (на скрине).

/*Определение оптимальности показателей*/
CREATE TRIGGER Optimality_indicators ON Dynamics_of_indicators
FOR INSERT AS
DECLARE
@indicator_value as float,
@ddate as datetime,
@indicatorcode as int,
@optimality as varchar(30)
/*Получаем код предприятия, код показателя, значение показателя и дату*/
SELECT @indicatorcode = Indicator_code, @ddate = Date, @indicator_value = Value
FROM Dynamics_of_indicators
/*Если значение >= 100, то показатель является оптимальным*/
if (@indicator_value >= 100)
BEGIN
SET @optimality = 'Показатель оптимален'
END
/*Если значение < 100, то показатель является неоптимальным*/
else
BEGIN
SET @optimality = 'Показатель не оптимален'
END
UPDATE Dynamics_of_indicators
SET Optimality = @optimality
WHERE @indicator_value = Value

К сообщению приложен файл. Размер - 6Kb
24 апр 16, 15:36    [19099423]     Ответить | Цитировать Сообщить модератору
 Re: Некорректная работа триггера  [new]
aleks2
Guest
/*Определение оптимальности показателей*/
CREATE TRIGGER Optimality_indicators ON Dynamics_of_indicators
FOR INSERT AS
DECLARE
/*Получаем код предприятия, код показателя, значение показателя и дату*/
  
 update di set Optimality = case  when di.Value >= 100 then N'Показатель оптимален' else N'Показатель не оптимален' end
   from Dynamics_of_indicators as di inner join inserted as i on di.ID = i.ID; -- ID = ваш УНИКАЛЬНЫЙ ключ для Dynamics_of_indicators, лучше Primary Key.
 
24 апр 16, 15:56    [19099438]     Ответить | Цитировать Сообщить модератору
 Re: Некорректная работа триггера  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
aleks2
/*Определение оптимальности показателей*/
CREATE TRIGGER Optimality_indicators ON Dynamics_of_indicators
FOR INSERT AS
DECLARE
/*Получаем код предприятия, код показателя, значение показателя и дату*/
  
 update di set Optimality = case  when di.Value >= 100 then N'Показатель оптимален' else N'Показатель не оптимален' end
   from Dynamics_of_indicators as di inner join inserted as i on di.ID = i.ID; -- ID = ваш УНИКАЛЬНЫЙ ключ для Dynamics_of_indicators, лучше Primary Key.
 
Что там DECLARE делает?
24 апр 16, 15:58    [19099440]     Ответить | Цитировать Сообщить модератору
 Re: Некорректная работа триггера  [new]
andrey odegov
Member

Откуда:
Сообщений: 473
а вычисляемый столбец не подойдет?
24 апр 16, 16:05    [19099463]     Ответить | Цитировать Сообщить модератору
 Re: Некорректная работа триггера  [new]
Henry Johnson
Member

Откуда:
Сообщений: 5
aleks2
/*Определение оптимальности показателей*/
CREATE TRIGGER Optimality_indicators ON Dynamics_of_indicators
FOR INSERT AS
DECLARE
/*Получаем код предприятия, код показателя, значение показателя и дату*/
  
 update di set Optimality = case  when di.Value >= 100 then N'Показатель оптимален' else N'Показатель не оптимален' end
   from Dynamics_of_indicators as di inner join inserted as i on di.ID = i.ID; -- ID = ваш УНИКАЛЬНЫЙ ключ для Dynamics_of_indicators, лучше Primary Key.
 

Большое спасибо, работает.
24 апр 16, 17:05    [19099578]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить