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

Откуда:
Сообщений: 3
Здравствуйте. Необходимо было сделать "неприлично" типовое задание на создание триггера: при изменении данных, заносить текущую дату в специальный столбец. Правильно надо было сделать так:
CREATE TRIGGER uEmployee ON Employee
AFTER UPDATE NOT FOR REPLICATION AS
BEGIN
SET NOCOUNT ON;
UPDATE Employee
SET Employee.ModifiedDate = GETDATE()
FROM inserted
WHERE inserted.EmployeeID = Employee.EmployeeID
END

Я сделал практически так же, за исключением строчки
FROM inserted
. Не знаю почему, но никак не пойму для чего же нужна эта строчка. Объясните пожалуйста.
30 май 11, 23:27    [10735464]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синтаксису при создании триггера.  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Использование таблиц inserted и deleted
31 май 11, 00:31    [10735691]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синтаксису при создании триггера.  [new]
dllxllb
Member

Откуда:
Сообщений: 3
invm, спасибо,но это я прочел. Вопрос не в том, что это за таблица inserted, а в том, почему будет не верным если опустить строчку
FROM inserted
?
31 май 11, 00:38    [10735705]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синтаксису при создании триггера.  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Очевидно плохо читали, иначе вопроса бы не возникло. Замените в вашем коде update на select и посмотрите на результат.
31 май 11, 00:49    [10735741]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синтаксису при создании триггера.  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8877
Мммм...
А как узнать (без использования inserted (или deleted)) какая именно строка (точнее - какой Employee.EmployeeID) изменяется? Никак.
Кстати, если за одну операцию изменяется более одной строки и это изменение затрагивает идентификатор - Employee.EmployeeID,- задача усложняется...
ИМБО, если что...
31 май 11, 00:56    [10735755]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синтаксису при создании триггера.  [new]
dllxllb
Member

Откуда:
Сообщений: 3
SIMPLicity_, о том что для определения изменяемой строки необходимо обращение к inserted я знаю. По-этому и обращаюсь к этой таблице :
WHERE inserted.EmployeeID = Employee.EmployeeID
А вот почему нужен
from inserted 
решительно не понимаю, ну заклинило и все, или просто чего то "тупо" не знаю.
31 май 11, 01:25    [10735827]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синтаксису при создании триггера.  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
У вас синтаксис апдейта кривой. Ну т.е. он легитимный, конечно, но понятнее будет писать так:
UPDATE e SET ModifiedDate = GETDATE()
FROM inserted i
  inner join dbo.Employee e on i.EmployeeID = e.EmployeeID;
31 май 11, 02:53    [10735915]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синтаксису при создании триггера.  [new]
Glory
Member

Откуда:
Сообщений: 104751
dllxllb
SIMPLicity_, о том что для определения изменяемой строки необходимо обращение к inserted я знаю. По-этому и обращаюсь к этой таблице :
WHERE inserted.EmployeeID = Employee.EmployeeID
А вот почему нужен
from inserted 
решительно не понимаю, ну заклинило и все, или просто чего то "тупо" не знаю.

Потому что невозможно в WHERE указывать таблицы, которых нет во FROM
31 май 11, 10:03    [10736579]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить