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

Откуда:
Сообщений: 85
Добрый...!

Такой вот триггер:

CREATE TRIGGER Docinsert on dbo.Docs
INSTEAD OF INSERT
AS
DECLARE @Category int
SET @Category = 200
BEGIN
    INSERT INTO dbo.Docs SELECT dt, @Category  FROM inserted
END


Не понятно, почему такой запрос проходит:
 Insert into docs (dt, category) values ('20121130', 400)


а такой нет:
 Insert into docs (dt) values ('20121130')


Понятно, что column "Category" ноли не разрешает, но ведь вставляет запись триггер, а в нем все равно задается значение!

Получается, что нужно задавать значение всех полей, даже тех, которые триггером генерятся? От балды что-ли ставить?
10 дек 12, 20:35    [13609394]     Ответить | Цитировать Сообщить модератору
 Re: Триггер INSTEAD OF INSERT (непонятки)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
Vladimir_V.
Понятно, что column "Category" ноли не разрешает, но ведь вставляет запись триггер, а в нем все равно задается значение!
А если в триггере не вставится?

Да, можно проверять констрейны после срабатывания всех триггеров, тем более для INSTEAD OF триггеров (а ещё лучше при коммите транзакции), но вот так сделано, бай дизайн, как говорится.

Можно разрешить NULL или указать DEFAULT
10 дек 12, 20:49    [13609446]     Ответить | Цитировать Сообщить модератору
 Re: Триггер INSTEAD OF INSERT (непонятки)  [new]
Vladimir_V.
Member

Откуда:
Сообщений: 85
alexeyvg, хм, странно конечно, при insert в триггере и проверялся бы, а то раньше времени как бы до insert.
10 дек 12, 21:01    [13609473]     Ответить | Цитировать Сообщить модератору
 Re: Триггер INSTEAD OF INSERT (непонятки)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Vladimir_V.,

в операторе INSERT надо писать список полей у целевой таблицы.

Что касается срабатывания констрейнтов до триггера INSTEAD OF INSERT,
то так быоло в SQL 2000 (по крайней мере проверка на NOT NULL).
Я делаю вывод, что версия Вашего сервера - 8.0.

В SQL2005+ констрейнты до триггера INSTEAD OF INSERT не проверяются.

Всё вышеизложенное - IMHO и ЕМНИП
10 дек 12, 21:31    [13609545]     Ответить | Цитировать Сообщить модератору
 Re: Триггер INSTEAD OF INSERT (непонятки)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
iap
В SQL2005+ констрейнты до триггера INSTEAD OF INSERT не проверяются.
Да, действительно, давно не использовал INSTEAD OF INSERT триггеры, в более поздних версиях не проверяется.
10 дек 12, 22:09    [13609711]     Ответить | Цитировать Сообщить модератору
 Re: Триггер INSTEAD OF INSERT (непонятки)  [new]
Vladimir_V.
Member

Откуда:
Сообщений: 85
Ясно, спасибо! И о чем только думали в 2000 году :)
11 дек 12, 05:39    [13610269]     Ответить | Цитировать Сообщить модератору
 Re: Триггер INSTEAD OF INSERT (непонятки)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Vladimir_V.
Ясно, спасибо! И о чем только думали в 2000 году :)
Давайте их простим!
Ведь триггеры INSTEAD OF в SQL2000 только-только появились.
11 дек 12, 09:22    [13610521]     Ответить | Цитировать Сообщить модератору
 Re: Триггер INSTEAD OF INSERT (непонятки)  [new]
Vladimir_V.
Member

Откуда:
Сообщений: 85
iap, конечно простим ;) Вставим в поле default.
11 дек 12, 09:49    [13610590]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить