begin process at 2010 02 10 05:42:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Triggers

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

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


 Information sur la source

Note :
7,5 / 10 - par 2 personnes
7,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Triggers Classé sous :sqlserver, sqlserver2005, version, procéduresstockées, tsql Niveau :Expert Date de création :28/04/2007 Vu :5 529

Auteur : skweeky

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note


 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/


 Sources du même auteur

SQL SERVER : VÉRIFICATION DE L'ESPACE LIBRE SUR LE SERVEUR
SQL SERVER : CONVERSION IP EN CHAÎNE DE TEXTE VERS INTEGER E...
SQL SERVER 2005 : RECHERCHE DE CHAMPS PAR LEURS NOMS MULTI B...
SQL SERVER 2005 : RÉCUPÉRER LE CONTENU D'UN SCHÉMA XSD
SQL SERVER – AGRÉGER DES CHAMPS VARCHAR

 Sources de la même categorie

Source avec Zip Source avec une capture TRIGGER DE MAJ par softnour
ENREGISTRER LES MISES À JOUR DE CHAQUE PERSONNE CONNECTÉ SUR... par witch17
VALIDATION DU FORMAT DU N° DE TÉLÉPHONE AVEC TSQL par bad_smi
Source avec Zip GESTION DE STOCK À L'AIDE D'UN TRIGGER [SQL SERVER 2000] par Draven

 Sources en rapport avec celle ci

VALIDATION DU FORMAT DU N° DE TÉLÉPHONE AVEC TSQL par bad_smi
Source avec Zip SOURCES POUR LE TUTO TEAM SYSTEM ÉDITION DBA par skweeky
DÉSACTIVER UNE CONNEXION (LOGIN) SUR SQL SERVER par skweeky
RENOMER UNE CONNEXION (LOGIN) SOUS SQL SERVER par skweeky
PORTÉ IIF SUR T-SQL par Malkuth

Commentaires et avis

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


Discussions en rapport avec ce code source dans le forum

comment peut-on programmer avec une version de Sql gratuite puis ensuite l'installer sur SqlServer?? [ par sandra26 ] Bonjour, voila je sais programmer en Sql mais je ne connais pas comment se passe les relations entre tous les Sql qui existent.En fait je voudrais fai Récupération de résultat avec un EXEC (@TSQL_String) [ par Malkuth ] Salut a tous une petite question matinale avant d'aller me coucher :Existe-t'il un moyen de récupérer une valeur retourner par un exec sur une Chaine Equivalent du "load data infile" en SQLSERVER [ par yanis7518 ] Slt a tousje souhaiterai savoir si il existe une commande equivalente au "load data infile 'file' replace into table " Récupérer la version de SQL via VB6 [ par drakkard ] Bonjour Bonjour,comment connaitre la version de SQL depuis un poste client, si c'est la version EXPRESS, MSDE ou SERVER installéeMerci d'avance... Bid Logique TSQL [ par cbu ] Bonjour,je suis complètement dans le flou avec ma procédure stockée ..Je vous explique :J'ai 2 tables T_CLIENT Cli_IDCli_NomCli_PrenomT_FACTUREFac_IDF sqlserver [ par sidalilo ] salut les amis. je suis etudiant et je veux les etapes pour joindre mes tables d'une application dans sqlserver afin que mon application peut marcher Export base de données SqlServer vers Oracle [ par issam164 ] Bonjour, Je veux exporter une base de données SqlServer vers une procédure stockée [ par caudette ] bonjour,j'ai une prodédure stockée d'insertion des données mais elle ne fonctionne. l'erreur est trop de parametres;l'insertion doit se faire juste da Problème d'égalite sous sqlserver 2005 [ par slecoustre ] bonjourje viens de m'apercevoir sur mon serveur sql que lorsque j'execute cette requete:SELECT 1 WHERE<f connexion sqlserver [ par issam164 ] Bonjour,je travaille sur une application web developpé en asp.net j'ai un message d'erreur qui se lance comme suit : Une erreur s'est produ


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales