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

Откуда:
Сообщений: 204
добрый день! Скажите пжл, что будет считываться с таблиц insert и delete в триггере типа instead of?
11 авг 15, 16:45    [18004273]     Ответить | Цитировать Сообщить модератору
 Re: триггер instead of  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
relav
добрый день! Скажите пжл, что будет считываться с таблиц insert и delete в триггере типа instead of?
Что напишете, то и будет...
11 авг 15, 16:46    [18004279]     Ответить | Цитировать Сообщить модератору
 Re: триггер instead of  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
то же, что и в триггерах after
11 авг 15, 16:47    [18004283]     Ответить | Цитировать Сообщить модератору
 Re: триггер instead of  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
Knyazev Alexey
то же, что и в триггерах after
Это смотря что именно он имеет в виду.
Например, поле со свойством IDENTITY или типа ROWVERSION читать бесполезно,
ибо там NULL в отличие от триггера AFTER INSERT
11 авг 15, 16:50    [18004309]     Ответить | Цитировать Сообщить модератору
 Re: триггер instead of  [new]
relav
Member

Откуда:
Сообщений: 204
iap,

)) я имею ввиду значения предыдущие и текущие будет считываться или что?
11 авг 15, 16:58    [18004359]     Ответить | Цитировать Сообщить модератору
 Re: триггер instead of  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
relav
iap,

)) я имею ввиду значения предыдущие и текущие будет считываться или что?


тест накидать за 1 минуту можно - это быстрее, чем создать тему в форуме
11 авг 15, 17:00    [18004376]     Ответить | Цитировать Сообщить модератору
 Re: триггер instead of  [new]
relav
Member

Откуда:
Сообщений: 204
Knyazev Alexey,

еще один вопрос. что написать в триггере на удаление , чтоб данные в таблице по событию удалить не удалялись, а выдавалось сообщение: "данные удалять запрещено." Сделал через инструкцию raiserror, но она вывела сообщение и данные удалились. raiserror - не останавливает программу?
11 авг 15, 17:19    [18004502]     Ответить | Цитировать Сообщить модератору
 Re: триггер instead of  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1692
relav,

rollback transaction
11 авг 15, 17:26    [18004562]     Ответить | Цитировать Сообщить модератору
 Re: триггер instead of  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8316
relav,

throw прекращает выполнение пакета, raiserror - нет. RTFM.
11 авг 15, 17:34    [18004617]     Ответить | Цитировать Сообщить модератору
 Re: триггер instead of  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1692
Владислав Колосов
relav,

throw прекращает выполнение пакета, raiserror - нет. RTFM.


он версию сервера не сказал, есть вероятность что она ниже 2012
11 авг 15, 17:40    [18004651]     Ответить | Цитировать Сообщить модератору
 Re: триггер instead of  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
relav
Knyazev Alexey,

еще один вопрос. что написать в триггере на удаление , чтоб данные в таблице по событию удалить не удалялись, а выдавалось сообщение: "данные удалять запрещено." Сделал через инструкцию raiserror, но она вывела сообщение и данные удалились. raiserror - не останавливает программу?
CREATE TRIGGER InsteadOfDeleteTable ON [Table] AS PRINT N'данные удалять запрещено';
11 авг 15, 20:46    [18005436]     Ответить | Цитировать Сообщить модератору
 Re: триггер instead of  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
iap
relav
Knyazev Alexey,

еще один вопрос. что написать в триггере на удаление , чтоб данные в таблице по событию удалить не удалялись, а выдавалось сообщение: "данные удалять запрещено." Сделал через инструкцию raiserror, но она вывела сообщение и данные удалились. raiserror - не останавливает программу?
CREATE TRIGGER InsteadOfDeleteTable ON [Table] AS PRINT N'данные удалять запрещено';
Поторопился, недописал:
CREATE TRIGGER InsteadOfDeleteTable ON [Table] INSTEAD OF DELETE AS PRINT N'данные удалять запрещено';
11 авг 15, 22:38    [18005686]     Ответить | Цитировать Сообщить модератору
 Re: триггер instead of  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
Microsoft постоянно обещает убрать возможность возвращать резалтсет из триггера.
Получается, правильнее не PRINT, а RAISERROR:
CREATE TRIGGER InsteadOfDeleteTable ON [Table] INSTEAD OF DELETE AS RAISERROR(N'данные удалять запрещено',0,0) WITH NOWAIT;
11 авг 15, 22:45    [18005715]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить