forked from vincent/notebook
42 lines
1.4 KiB
Transact-SQL
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
|
|
|
|
|
|
|