End
go
После создания триггера попытка выполнения любой из нижеприведенных команд SQL:
Create table table5 (c1 int)
Drop table table1
Alter table table1 add c4 int null
в приводит к появлению сообщения, пободного этому:
Msg 3609, Level 16, State 2, Line 4
The transaction ended in the trigger. The batch has been aborted.
LOGON триггеры.
При срабатывании любого LOGON триггера можно, как и в случае с DDL триггерами, использовать функцию eventdata(), но единственно возможным при этом будет событие LOGON, которое имеет следующие элементы(параметры):
| Название элемента
| Тип данных элемента
|
| event_type
| String
|
| post_time
| DateTime
|
| spid
| Sint32
|
| server_name
| String
|
| Login_name
| String
|
| login_type
| String
|
| sid
| Varbinary(85)
|
| client_host
| String
|
| is_pooled
| Sint32
|
| LoginName
| String
|
| UserName
| String
|
Для создания LOGON триггера пользователь должен иметь привелегию CONTROL SERVER. Все DDL тиггеры уровня сервера и LOGON триггеры хранятся в БД master. Также следует отметить, что в случае неправильного написания LOGON триггера возможна ситуация, когда ЛЮБОЕ подключение к MS SQL Server 2005 станет невозможным.
Пример 7.
Создание простейшего LOGON триггера, который для указанного логина ограничивает количество одновременно установленных соединений с MS SQL Server 2005 до 2 (следует отметить, что с одним и тем же логином может быть связано несколько пользователей).
if exists(select name from sys.server_triggers where name = 'trig_logon1')