1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| ALTER TRIGGER TR_IOF_CREATE_TABLE
ON DATABASE
FOR CREATE_TABLE
AS
BEGIN
SET NOCOUNT ON
DECLARE @x xml = EVENTDATA()
DECLARE @sql_recreate_table nvarchar(max)
, @sql_drop_table nvarchar(max)
, @table_to_drop varchar(1000)
SELECT @sql_recreate_table = N.n.value('(./TSQLCommand/CommandText)[1]', 'varchar(max)')
, @sql_drop_table = 'DROP TABLE ' + N.n.value('(./SchemaName[1])', 'varchar(128)')
+ '.' + N.n.value('(./ObjectName[1])', 'varchar(128)')
FROM @x.nodes('/EVENT_INSTANCE') AS N(n)
-- Si le dernier caractère n'est pas une parenthèse
IF RIGHT(@sql_recreate_table, CHARINDEX(')', REVERSE(@sql_recreate_table)) - 1) = ''
BEGIN
SET @sql_recreate_table = @sql_recreate_table + ' ON Test'
BEGIN TRY
BEGIN TRANSACTION
EXEC (@sql_drop_table)
EXEC (@sql_recreate_table)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
DECLARE @err_msg nvarchar(4000) = 'Line ' + CAST(ERROR_LINE() AS varchar(10)) + ' - ' + ERROR_MESSAGE()
, @err_svt int = ERROR_SEVERITY()
, @err_stt int = ERROR_STATE()
IF XACT_STATE() <> 0
BEGIN
ROLLBACK TRANSACTION;
END
RAISERROR(@err_msg, @err_svt, @err_stt);
END CATCH
END
END |
Partager