Building and Optimizing Triggers in SQL Server
Florin Angelescu
Instructor
Database level
CREATE_TABLE,ALTER_TABLE,DROP_TABLE
CREATE_VIEW,ALTER_VIEW,DROP_VIEW
CREATE_INDEX,ALTER_INDEX,DROP_INDEX
ADD_ROLE_MEMBER,DROP_ROLE_MEMBER
CREATE_STATISTICS,DROP_STATISTICS
Server level
CREATE_DATABASE,ALTER_DATABASE,
DROP_DATABASE
GRANT_SERVER,DENY_SERVER,
REVOKE_SERVER
CREATE_CREDENTIAL,ALTER_CREDENTIAL,
DROP_CREDENTIAL
CREATE TRIGGER DatabaseAudit
ON DATABASE
FOR DDL_TABLE_VIEW_EVENTS
AS
INSERT INTO [DatabaseAudit] ([EventType], [Database], [Object],
[UserAccount], [Query], [EventTime])
SELECT
EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(50)'),
EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]', 'NVARCHAR(50)'),
EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(100)'),
EVENTDATA().value('(/EVENT_INSTANCE/LoginName)[1]', 'NVARCHAR(100)'),
EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'NVARCHAR(MAX)'),
EVENTDATA().value('(/EVENT_INSTANCE/PostTime)[1]', 'DATETIME');
| EventType | Database | Object | UserAccount | Query | EventTime |
| CREATE_TABLE | FreshFruit | Sales | XXX | CREATE TABLE [Sales]... | 2019-05-13 |
| CREATE_TABLE | FreshFruit | Employees | XXX | CREATE TABLE [Employ... | 2019-05-13 |
CREATE TRIGGER PreventDatabaseDelete
ON ALL SERVER
FOR DROP_DATABASE
AS
PRINT 'You are not allowed to remove existing databases.';
ROLLBACK;
Building and Optimizing Triggers in SQL Server