Ce code permet d'intercepter tout ALTER PROCEDURE et donc toute modification de procédure stockée effectué sur une base de données.
Il crée une table d'historique et y range la version précedente de la procédure.
La table d'historique créée est dbo.SpHisto.
Source / Exemple :
CREATE TRIGGER [TrackSpChange] ON DATABASE
FOR ALTER_PROCEDURE
AS
BEGIN
SET NOCOUNT ON
DECLARE @sql nvarchar(max)
DECLARE @event xml
DECLARE @id int
SET @event = eventdata()
SET @id = OBJECT_ID(@event.value('/EVENT_INSTANCE[1]/ObjectName[1]',
'sysname'), 'P')
SET @sql = @event.value('/EVENT_INSTANCE[1]/TSQLCommand[1]/CommandText[1]',
'nvarchar(max)')
ROLLBACK
BEGIN TRANSACTION
IF OBJECT_ID('dbo.SpHisto', 'U') IS NULL
SELECT TOP ( 0 )
GETDATE() AS DateModified
INTO dbo.SpHisto
FROM sys.sql_modules
INSERT INTO dbo.SpHisto
SELECT *,
GETDATE() AS DateModified
FROM sys.sql_modules
WHERE object_id = @id
EXEC ( @sql )
SET NOCOUNT OFF
END
GO
Conclusion :
Attention ce n'est qu'une première version, un bug n'est pas à exclure.
Christian Robert - MVP SQL Server
http://blogs.developpeur.org/christian/
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.