begin process at 2008 05 12 11:14:39
1 170 205 membres
108 nouveaux aujourd'hui
13 957 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SQL SERVER 2005 : HISTORISER LES PROCÉDURES STOCKÉES D'UNE BASE DE DONNÉES


Information sur la source



Description

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

  • 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
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/
  • signaler à un administrateur
    Commentaire de yalk1960 le 12/02/2008 14:19:05 5/10

    J'aimerai savoir si mon query est correcte, je voudrais copier une table SCH_website_xml dans une nouvelle table journal_update, qui crée un champ date de création pour chaque fois que le query est lancé.
    Pouvez-vous m'aider?

    --Update de la table SCH_website_xml avec création d'une table avec les informations
    create trigger up_on_SCH_website_xml on SCH_website_xml
    for update
    as
    declare @table varchar(20) declare @genre varchar(20) declare @xml varchar (20)
    set @table='SCH_website_xml'
    set @genre='modification'
    set @xml='SCH_inscription'
    begin
    insert into journal_backup select current_user,@table,@genre,@xml current_timestamp
    end

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS