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

Откуда:
Сообщений: 41
Добрый вечер, подскажите пожалуйста , как правильно написать триггер. Задача: есть две таблицы 1 Сотрудники 2 Зарплата ( банальный пример и ненужный, мне просто для себя, чтоб научиться). Суть в том , если в таблице "зарплата" у человека меняется зарплата , то в таблице "сотрудники" в поле "статус " тоже поменялось значение (скажем с "в" на "а").
Пример статус "а" присваивается человеку, если у него зарплата > 15000р. Я поменял зарплату скажем с 14000 на 16000 и хочу, чтоб во второй таблице в поле "статус" тоже поменялось значение ! Заранее спасибо
Я так понял мне нужен trigger for update,я пробовал но не получается ...
28 дек 11, 18:25    [11841685]     Ответить | Цитировать Сообщить модератору
 Re: trigger for update  [new]
libru
Member

Откуда:
Сообщений: 877
сделай поле "статус" вычислимым
28 дек 11, 18:34    [11841753]     Ответить | Цитировать Сообщить модератору
 Re: trigger for update  [new]
Baddy
Member

Откуда: Харьков
Сообщений: 174
I3axoo,

>>я пробовал но не получается ...

а что не получается? покажите
28 дек 11, 18:37    [11841771]     Ответить | Цитировать Сообщить модератору
 Re: trigger for update  [new]
I3axoo
Member

Откуда:
Сообщений: 41
Baddy,
CREATE trigger trig
on T_emp
for update
as
DECLARE @std_salary money, @new_salary money
set @std_salary = 15000
SELECT @new_salary = salary from inserted
IF (@new_salary > @std_salary )
begin
update Test.dbo.Status
SET Stsus = 'A'
end
28 дек 11, 18:46    [11841824]     Ответить | Цитировать Сообщить модератору
 Re: trigger for update  [new]
libru
Member

Откуда:
Сообщений: 877
I3axoo
SELECT @new_salary = salary from inserted
а если в inserted несколько строк?
28 дек 11, 18:48    [11841836]     Ответить | Цитировать Сообщить модератору
 Re: trigger for update  [new]
I3axoo
Member

Откуда:
Сообщений: 41
Для начала хотя бы одно поле обновляется
alter trigger trig
on T_emp
for update
as
DECLARE @std_salary money, @new_salary money ,@id int
set @std_salary = 15000
SELECT @new_salary = salary from inserted
SELECT @id = id from inserted
IF (@new_salary > @std_salary )
begin
update Test.dbo.Status
SET Stsus = 'A'
where Status.id = @id
end
28 дек 11, 18:49    [11841840]     Ответить | Цитировать Сообщить модератору
 Re: trigger for update  [new]
Baddy
Member

Откуда: Харьков
Сообщений: 174
I3axoo,

create trigger trigger_name on salary
after update
as
update  e 
set e.[staus] = case when i.salary>15000 then 'A' else 'B' end
from employee e join inserted i on e.id = i.employee_id
28 дек 11, 18:59    [11841892]     Ответить | Цитировать Сообщить модератору
 Re: trigger for update  [new]
I3axoo
Member

Откуда:
Сообщений: 41
Baddy,
Картинка с другого сайта.
28 дек 11, 21:24    [11842513]     Ответить | Цитировать Сообщить модератору
 Re: trigger for update  [new]
I3axoo
Member

Откуда:
Сообщений: 41
помогите решить этот вопрос , плиз !
28 дек 11, 22:28    [11842683]     Ответить | Цитировать Сообщить модератору
 Re: trigger for update  [new]
Glory
Member

Откуда:
Сообщений: 104751
I3axoo
помогите решить этот вопрос , плиз !

Не обновляйте записи в Managament Studio.
Пишите Update.
28 дек 11, 22:41    [11842723]     Ответить | Цитировать Сообщить модератору
 Re: trigger for update  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
I3axoo
помогите решить этот вопрос , плиз !
Поправьте триггер:
create trigger trigger_name on salary
after update
as
set nocount on
update  e 
set e.[staus] = case when i.salary>15000 then 'A' else 'B' end
from employee e join inserted i on e.id = i.employee_id
28 дек 11, 22:43    [11842730]     Ответить | Цитировать Сообщить модератору
 Re: trigger for update  [new]
I3axoo
Member

Откуда:
Сообщений: 41
Справился , ошибка из-за первичного ключа ! Запрос получился такой
create trigger trig on sal
after update
as
update e
set e.[status] = case when i.salary >15000 then 'A'
when i.salary between 13000 and 15000 then 'B'
when i.salary <10000 then 'C'
end
from emp e join inserted i on e.id = i.id
28 дек 11, 22:45    [11842736]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить