#sql #sql-server #sql-server-2008
#sql #sql-сервер #sql-server-2008
Вопрос:
Могу ли я заблокировать вставку во всю таблицу с помощью серверного триггера для указанной базы данных
Комментарии:
1. Слишком расплывчато, без объяснения того, зачем вам нужен А) триггер и б) текущие роли, процедур недостаточно для управления тем, что, если таковые имеются, вставлено в теоретическую таблицу.
Ответ №1:
Если вы хотите предотвратить вставку записей в любую таблицу, написав серверный триггер, то ответ — нет, это невозможно.
Серверные триггеры обрабатывают только DDL (СОЗДАНИЕ, ИЗМЕНЕНИЕ, УДАЛЕНИЕ …), а не DML (ВСТАВКА, ОБНОВЛЕНИЕ, УДАЛЕНИЕ):
https://msdn.microsoft.com/en-us/library/ms189799.aspx
Серверные триггеры:
-- Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE,
-- or UPDATE STATISTICS statement (DDL Trigger)
CREATE TRIGGER trigger_name
ON { ALL SERVER | DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME < method specifier > [ ; ] }
<ddl_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
-- Trigger on a LOGON event (Logon Trigger)
CREATE TRIGGER trigger_name
ON ALL SERVER
[ WITH <logon_trigger_option> [ ,...n ] ]
{ FOR| AFTER } LOGON
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME < method specifier > [ ; ] }
<logon_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
Комментарии:
1. Вам понадобится триггер для каждой таблицы