Sql server 2005 : historiser les procédures stockées d'une base de données

Contenu du snippet

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/

A voir également

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.