notebook/IT/SQL/SCRIPTS SQL QSA ORSYS/DEMO trigger DDL base et serveur.sql
2020-11-26 18:38:25 +01:00

42 lines
1.4 KiB
Transact-SQL

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