CREATE OR ALTER TRIGGER E_DDL_CREATE_TABLE ON DATABASE FOR CREATE_TABLE AS BEGIN DECLARE @XML XML = EVENTDATA(); -- contrôle du nom IF @XML.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname') NOT LIKE 'T?_%' ESCAPE('?') OR @XML.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname') NOT LIKE '%_[A-Z][A-Z][A-Z]' ESCAPE('?') BEGIN ROLLBACK; THROW 66666, 'Le nom d''une table doit être préfixé par "T_" et suffixé par un trigramme, par exemple "_ABC"', 1; END; -- utilisation de types obsolètes IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @XML.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname') AND TABLE_SCHEMA = @XML.value('(/EVENT_INSTANCE/SchemaName)[1]', 'sysname') AND DATA_TYPE IN ('text', 'ntext', 'image', 'datetime', 'smalldatetime')) BEGIN ROLLBACK; THROW 66666, 'les colonnes d''une table ne doivent pas comporter de type de données obsolètes ("text", "ntext", "image", "datetime", "smalldatetime").', 1; END; END; GO CREATE TRIGGER E_DDL_CREATE_TABLE ON ALL SERVER FOR CREATE_DATABASE AS BEGIN DECLARE @XML XML = EVENTDATA(); IF @XML.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'sysname') NOT LIKE 'DB?_%' ESCAPE '?' BEGIN ROLLBACK; THROW 66666, 'Le nom d''une base de données doit être préfixé par "DB_".', 1; END; END; GO