Marquage des enregistrements

Le
Robert Plagnard
Bonjour,
Nouveau dans SQL server, je voudrais disposer pour toutes les lignes de
toutes mes tables des 4 colonnes suivantes :
Creator (int) -- User_Id(user)
Created (Datetime) -- GetutcDate()
Modifier (int) -- idem
Modified (Datetime) -- idem

J'ai :
1) mis dans un trigger for insert
update <table> set
Created = GetutcDate(),
Creator = user_id( user )
where <PK> in ( select <PK> from inserted )
2) mis dans un triger for update
update <table> set
Modified = GetutcDate(),
Modifier = user_id( user )
where <PK> in ( select <PK> from inserted )

Quand j'insere une nouvelle ligne, les triggers for insert and update se
déclanchent (le deuxième à cause de l'update dans le trigger for insert).
Y-a-t-il une manière d'éviter cela?
Y-a-t-il une manière toute différente d'arriver au résultat souhaité?
Je constate que les dates sont au temps GMT, comment peut-on les afficher à
GMT+2?
Merci d'avance.

--
Robert Plagnard
Communauté Francophone des Professionnels FoxPro
Pour un développement durable
http://www.atoutfox.net
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fred BROUARD
Le #11855901
Robert Plagnard a écrit :
Bonjour,
Nouveau dans SQL server, je voudrais disposer pour toutes les lignes de
toutes mes tables des 4 colonnes suivantes :
Creator (int) -- User_Id(user)
Created (Datetime) -- GetutcDate()
Modifier (int) -- idem
Modified (Datetime) -- idem

J'ai :
1) mis dans un trigger for insert
update <table> set
Created = GetutcDate(),
Creator = user_id( user )
where <PK> in ( select <PK> from inserted )
2) mis dans un triger for update
update <table> set
Modified = GetutcDate(),
Modifier = user_id( user )
where <PK> in ( select <PK> from inserted )

Quand j'insere une nouvelle ligne, les triggers for insert and update se
déclanchent (le deuxième à cause de l'update dans le trigger for insert).
Y-a-t-il une manière d'éviter cela?
Y-a-t-il une manière toute différente d'arriver au résultat souhaité?
Je constate que les dates sont au temps GMT, comment peut-on les afficher à
GMT+2?
Merci d'avance.





update <table>
set Created = CURRENT_TIMESTAMP,
Creator = uid
FROM <table> T
INNER JOIN inserted i
ON T. CROSS JOIN master.dbo.sysprocesses
WHERE spid = @@SPID

pensez aussi à interdire les triggers imbriqués au niveau serveur
(sp_configure) et les triggers récursif au niveau de la base ALTER DATABASE.

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Robert Plagnard
Le #11855661
Merci beaucoup,
C'est exactement ce que je cherchais.
A+
--
Robert Plagnard
Communauté Francophone des Professionnels FoxPro
Pour un développement durable...
http://www.atoutfox.net



"Fred BROUARD" a écrit :

Robert Plagnard a écrit :
> Bonjour,
> Nouveau dans SQL server, je voudrais disposer pour toutes les lignes de
> toutes mes tables des 4 colonnes suivantes :
> Creator (int) -- User_Id(user)
> Created (Datetime) -- GetutcDate()
> Modifier (int) -- idem
> Modified (Datetime) -- idem
>
> J'ai :
> 1) mis dans un trigger for insert
> update <table> set
> Created = GetutcDate(),
> Creator = user_id( user )
> where <PK> in ( select <PK> from inserted )
> 2) mis dans un triger for update
> update <table> set
> Modified = GetutcDate(),
> Modifier = user_id( user )
> where <PK> in ( select <PK> from inserted )
>
> Quand j'insere une nouvelle ligne, les triggers for insert and update se
> déclanchent (le deuxième à cause de l'update dans le trigger for insert).
> Y-a-t-il une manière d'éviter cela?
> Y-a-t-il une manière toute différente d'arriver au résultat souhaité?
> Je constate que les dates sont au temps GMT, comment peut-on les afficher à
> GMT+2?
> Merci d'avance.
>


update <table>
set Created = CURRENT_TIMESTAMP,
Creator = uid
FROM <table> T
INNER JOIN inserted i
ON T. CROSS JOIN master.dbo.sysprocesses
WHERE spid = @@SPID

pensez aussi à interdire les triggers imbriqués au niveau serveur
(sp_configure) et les triggers récursif au niveau de la base ALTER DATABASE.

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************



Publicité
Poster une réponse
Anonyme