Savoir le nom de la table que l'on traite dans un trigger
5 réponses
Hervé R.
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans
les docs etc.. mais j'ai rien trouvé.
J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il
exécute, auriez vous une solution (genre select DB_NAME()).
J'explique un peu pourquoi car ma demande peut passer pour bizarre étant
donné qu'on créé un trigger sur une table donnée...
J'ai un ensemble de tables identiques mais avec des nom différents
(préfixées par 01 à 99). Ces tables auront un trigger identique qui
exécutera.
Ce trigger update un autre table qui est commune au 99 autres mais dans
laquelle j'ai une colonne qui contient le nom de la table d'origine.
Je voudrais donc créer un trigger 'générique' dont le code pourrait être
copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER
UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Med Bouchenafa
En principe si tu connais le nom de ton trigger, tu peux connaitre la table à laquelle il appartient
SELECT @tableid = parent_obj FROM sysobjects WHERE id = object_id(@triggername, 'local') AND xtype='TR'
-- Bien cordialement Med Bouchenafa
"Hervé R." a écrit dans le message de news: 44be0c63$0$895$
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans les docs etc.. mais j'ai rien trouvé. J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il exécute, auriez vous une solution (genre select DB_NAME()). J'explique un peu pourquoi car ma demande peut passer pour bizarre étant donné qu'on créé un trigger sur une table donnée... J'ai un ensemble de tables identiques mais avec des nom différents (préfixées par 01 à 99). Ces tables auront un trigger identique qui exécutera. Ce trigger update un autre table qui est commune au 99 autres mais dans laquelle j'ai une colonne qui contient le nom de la table d'origine. Je voudrais donc créer un trigger 'générique' dont le code pourrait être copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
Merci de vos réponses.
Hervé Rous
En principe si tu connais le nom de ton trigger, tu peux connaitre la table
à laquelle il appartient
SELECT @tableid = parent_obj FROM sysobjects WHERE id =
object_id(@triggername, 'local') AND xtype='TR'
--
Bien cordialement
Med Bouchenafa
"Hervé R." <hrous@eti-info.fr> a écrit dans le message de news:
44be0c63$0$895$ba4acef3@news.orange.fr...
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans
les docs etc.. mais j'ai rien trouvé.
J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il
exécute, auriez vous une solution (genre select DB_NAME()).
J'explique un peu pourquoi car ma demande peut passer pour bizarre étant
donné qu'on créé un trigger sur une table donnée...
J'ai un ensemble de tables identiques mais avec des nom différents
(préfixées par 01 à 99). Ces tables auront un trigger identique qui
exécutera.
Ce trigger update un autre table qui est commune au 99 autres mais dans
laquelle j'ai une colonne qui contient le nom de la table d'origine.
Je voudrais donc créer un trigger 'générique' dont le code pourrait être
copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER
UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
En principe si tu connais le nom de ton trigger, tu peux connaitre la table à laquelle il appartient
SELECT @tableid = parent_obj FROM sysobjects WHERE id = object_id(@triggername, 'local') AND xtype='TR'
-- Bien cordialement Med Bouchenafa
"Hervé R." a écrit dans le message de news: 44be0c63$0$895$
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans les docs etc.. mais j'ai rien trouvé. J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il exécute, auriez vous une solution (genre select DB_NAME()). J'explique un peu pourquoi car ma demande peut passer pour bizarre étant donné qu'on créé un trigger sur une table donnée... J'ai un ensemble de tables identiques mais avec des nom différents (préfixées par 01 à 99). Ces tables auront un trigger identique qui exécutera. Ce trigger update un autre table qui est commune au 99 autres mais dans laquelle j'ai une colonne qui contient le nom de la table d'origine. Je voudrais donc créer un trigger 'générique' dont le code pourrait être copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
Merci de vos réponses.
Hervé Rous
Hervé R.
Merci pour la réponse, mais il se trouve que je voudrais quelque chose de générique quelque soit le nom du trigger pour ne pas avoir à mettre le nom du trigger dans le code. Si il n'y a pas d'autre solution, je me débrouillerai avec ca.
Encore Merci
Hervé Rous
"Med Bouchenafa" a écrit dans le message de news:
En principe si tu connais le nom de ton trigger, tu peux connaitre la table à laquelle il appartient
SELECT @tableid = parent_obj FROM sysobjects WHERE id = object_id(@triggername, 'local') AND xtype='TR'
-- Bien cordialement Med Bouchenafa
"Hervé R." a écrit dans le message de news: 44be0c63$0$895$
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans les docs etc.. mais j'ai rien trouvé. J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il exécute, auriez vous une solution (genre select DB_NAME()). J'explique un peu pourquoi car ma demande peut passer pour bizarre étant donné qu'on créé un trigger sur une table donnée... J'ai un ensemble de tables identiques mais avec des nom différents (préfixées par 01 à 99). Ces tables auront un trigger identique qui exécutera. Ce trigger update un autre table qui est commune au 99 autres mais dans laquelle j'ai une colonne qui contient le nom de la table d'origine. Je voudrais donc créer un trigger 'générique' dont le code pourrait être copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
Merci de vos réponses.
Hervé Rous
Merci pour la réponse, mais il se trouve que je voudrais quelque chose de
générique quelque soit le nom du trigger pour ne pas avoir à mettre le nom
du trigger dans le code.
Si il n'y a pas d'autre solution, je me débrouillerai avec ca.
Encore Merci
Hervé Rous
"Med Bouchenafa" <com.hotmail@bouchenafa> a écrit dans le message de news:
eNT3bpyqGHA.4508@TK2MSFTNGP04.phx.gbl...
En principe si tu connais le nom de ton trigger, tu peux connaitre la
table à laquelle il appartient
SELECT @tableid = parent_obj FROM sysobjects WHERE id =
object_id(@triggername, 'local') AND xtype='TR'
--
Bien cordialement
Med Bouchenafa
"Hervé R." <hrous@eti-info.fr> a écrit dans le message de news:
44be0c63$0$895$ba4acef3@news.orange.fr...
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans
les docs etc.. mais j'ai rien trouvé.
J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il
exécute, auriez vous une solution (genre select DB_NAME()).
J'explique un peu pourquoi car ma demande peut passer pour bizarre étant
donné qu'on créé un trigger sur une table donnée...
J'ai un ensemble de tables identiques mais avec des nom différents
(préfixées par 01 à 99). Ces tables auront un trigger identique qui
exécutera.
Ce trigger update un autre table qui est commune au 99 autres mais dans
laquelle j'ai une colonne qui contient le nom de la table d'origine.
Je voudrais donc créer un trigger 'générique' dont le code pourrait être
copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER
UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
Merci pour la réponse, mais il se trouve que je voudrais quelque chose de générique quelque soit le nom du trigger pour ne pas avoir à mettre le nom du trigger dans le code. Si il n'y a pas d'autre solution, je me débrouillerai avec ca.
Encore Merci
Hervé Rous
"Med Bouchenafa" a écrit dans le message de news:
En principe si tu connais le nom de ton trigger, tu peux connaitre la table à laquelle il appartient
SELECT @tableid = parent_obj FROM sysobjects WHERE id = object_id(@triggername, 'local') AND xtype='TR'
-- Bien cordialement Med Bouchenafa
"Hervé R." a écrit dans le message de news: 44be0c63$0$895$
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans les docs etc.. mais j'ai rien trouvé. J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il exécute, auriez vous une solution (genre select DB_NAME()). J'explique un peu pourquoi car ma demande peut passer pour bizarre étant donné qu'on créé un trigger sur une table donnée... J'ai un ensemble de tables identiques mais avec des nom différents (préfixées par 01 à 99). Ces tables auront un trigger identique qui exécutera. Ce trigger update un autre table qui est commune au 99 autres mais dans laquelle j'ai une colonne qui contient le nom de la table d'origine. Je voudrais donc créer un trigger 'générique' dont le code pourrait être copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
Merci de vos réponses.
Hervé Rous
Philippe T [MS]
Bonjour,
On peut cumuler la réponse présédente avec cela :
<< DROP PROCEDURE testprocedure GO
CREATE PROCEDURE testprocedure AS BEGIN DECLARE @ProcId int DECLARE @ProcName nvarchar(100) DECLARE @TableId int
SELECT @ProcId = @@PROCID SELECT @ProcName = name FROM sysobjects WHERE id = @ProcId -- Nom de la procédure
PRINT @ProcName END GO
EXEC testprocedure GO
Si l'on est dans un trigger, je pense que le nom du trigger est récupéré dans @ProcName et donc on peut récupérer le nom de la table sous-jacente.
Phil. ________________________________________________________ Philippe TROTIN Microsoft Services France http://www.microsoft.com/france "Hervé R." wrote in message news:44be2239$0$864$
Merci pour la réponse, mais il se trouve que je voudrais quelque chose de générique quelque soit le nom du trigger pour ne pas avoir à mettre le nom du trigger dans le code. Si il n'y a pas d'autre solution, je me débrouillerai avec ca.
Encore Merci
Hervé Rous
"Med Bouchenafa" a écrit dans le message de news:
En principe si tu connais le nom de ton trigger, tu peux connaitre la table à laquelle il appartient
SELECT @tableid = parent_obj FROM sysobjects WHERE id = object_id(@triggername, 'local') AND xtype='TR'
-- Bien cordialement Med Bouchenafa
"Hervé R." a écrit dans le message de news: 44be0c63$0$895$
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans les docs etc.. mais j'ai rien trouvé. J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il exécute, auriez vous une solution (genre select DB_NAME()). J'explique un peu pourquoi car ma demande peut passer pour bizarre étant donné qu'on créé un trigger sur une table donnée... J'ai un ensemble de tables identiques mais avec des nom différents (préfixées par 01 à 99). Ces tables auront un trigger identique qui exécutera. Ce trigger update un autre table qui est commune au 99 autres mais dans laquelle j'ai une colonne qui contient le nom de la table d'origine. Je voudrais donc créer un trigger 'générique' dont le code pourrait être copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
Merci de vos réponses.
Hervé Rous
Bonjour,
On peut cumuler la réponse présédente avec cela :
<<
DROP PROCEDURE testprocedure
GO
CREATE PROCEDURE testprocedure AS
BEGIN
DECLARE @ProcId int
DECLARE @ProcName nvarchar(100)
DECLARE @TableId int
SELECT @ProcId = @@PROCID
SELECT @ProcName = name FROM sysobjects WHERE id = @ProcId -- Nom de la
procédure
PRINT @ProcName
END
GO
EXEC testprocedure
GO
Si l'on est dans un trigger, je pense que le nom du trigger est récupéré
dans @ProcName et donc on peut récupérer le nom de la table sous-jacente.
Phil.
________________________________________________________
Philippe TROTIN
Microsoft Services France http://www.microsoft.com/france
"Hervé R." <hrous@eti-info.fr> wrote in message
news:44be2239$0$864$ba4acef3@news.orange.fr...
Merci pour la réponse, mais il se trouve que je voudrais quelque chose de
générique quelque soit le nom du trigger pour ne pas avoir à mettre le nom
du trigger dans le code.
Si il n'y a pas d'autre solution, je me débrouillerai avec ca.
Encore Merci
Hervé Rous
"Med Bouchenafa" <com.hotmail@bouchenafa> a écrit dans le message de news:
eNT3bpyqGHA.4508@TK2MSFTNGP04.phx.gbl...
En principe si tu connais le nom de ton trigger, tu peux connaitre la
table à laquelle il appartient
SELECT @tableid = parent_obj FROM sysobjects WHERE id =
object_id(@triggername, 'local') AND xtype='TR'
--
Bien cordialement
Med Bouchenafa
"Hervé R." <hrous@eti-info.fr> a écrit dans le message de news:
44be0c63$0$895$ba4acef3@news.orange.fr...
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché
dans les docs etc.. mais j'ai rien trouvé.
J'ai besoin dans un trigger de connaitre le nom de la table sur lequel
il exécute, auriez vous une solution (genre select DB_NAME()).
J'explique un peu pourquoi car ma demande peut passer pour bizarre étant
donné qu'on créé un trigger sur une table donnée...
J'ai un ensemble de tables identiques mais avec des nom différents
(préfixées par 01 à 99). Ces tables auront un trigger identique qui
exécutera.
Ce trigger update un autre table qui est commune au 99 autres mais dans
laquelle j'ai une colonne qui contient le nom de la table d'origine.
Je voudrais donc créer un trigger 'générique' dont le code pourrait être
copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER
UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
CREATE PROCEDURE testprocedure AS BEGIN DECLARE @ProcId int DECLARE @ProcName nvarchar(100) DECLARE @TableId int
SELECT @ProcId = @@PROCID SELECT @ProcName = name FROM sysobjects WHERE id = @ProcId -- Nom de la procédure
PRINT @ProcName END GO
EXEC testprocedure GO
Si l'on est dans un trigger, je pense que le nom du trigger est récupéré dans @ProcName et donc on peut récupérer le nom de la table sous-jacente.
Phil. ________________________________________________________ Philippe TROTIN Microsoft Services France http://www.microsoft.com/france "Hervé R." wrote in message news:44be2239$0$864$
Merci pour la réponse, mais il se trouve que je voudrais quelque chose de générique quelque soit le nom du trigger pour ne pas avoir à mettre le nom du trigger dans le code. Si il n'y a pas d'autre solution, je me débrouillerai avec ca.
Encore Merci
Hervé Rous
"Med Bouchenafa" a écrit dans le message de news:
En principe si tu connais le nom de ton trigger, tu peux connaitre la table à laquelle il appartient
SELECT @tableid = parent_obj FROM sysobjects WHERE id = object_id(@triggername, 'local') AND xtype='TR'
-- Bien cordialement Med Bouchenafa
"Hervé R." a écrit dans le message de news: 44be0c63$0$895$
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans les docs etc.. mais j'ai rien trouvé. J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il exécute, auriez vous une solution (genre select DB_NAME()). J'explique un peu pourquoi car ma demande peut passer pour bizarre étant donné qu'on créé un trigger sur une table donnée... J'ai un ensemble de tables identiques mais avec des nom différents (préfixées par 01 à 99). Ces tables auront un trigger identique qui exécutera. Ce trigger update un autre table qui est commune au 99 autres mais dans laquelle j'ai une colonne qui contient le nom de la table d'origine. Je voudrais donc créer un trigger 'générique' dont le code pourrait être copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
Merci de vos réponses.
Hervé Rous
SQLpro
Insiprez vous de ce code :
-- le trigger de traçage ALTER TRIGGER E_UD_APT ON T_APISTER_APT FOR UPDATE, DELETE AS INSERT INTO T_H_APISTER_APT SELECT d.*, CASE WHEN EXISTS(SELECT * FROM inserted) THEN 'U' ELSE 'D' END , CURRENT_TIMESTAMP, hostname, program_name , nt_domain, nt_username, net_address, loginame, s.name --> nom du trigger FROM deleted AS d CROSS JOIN master.dbo.sysprocesses as p CROSS JOIN sysobjects as s --> table système contennt les défintions d'objets WHERE p.spid = @@SPID AND s.id = @@PROCID --> identifiant système de la procédure en cours (dans notre cas trigger)
Voir le post intitulé "trigger, curseur et création de fichier texte du 18/07.
A +
-- Frédéric BROUARD - MVP SQL Server, expert SGBDR & SQL Le site SQL et les SGBDR http://sqlpro.developpez.com Audit, conseil, formation, modélisation, optimisation => http://www.datasapiens.com
"Hervé R." a écrit :
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans les docs etc.. mais j'ai rien trouvé. J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il exécute, auriez vous une solution (genre select DB_NAME()). J'explique un peu pourquoi car ma demande peut passer pour bizarre étant donné qu'on créé un trigger sur une table donnée... J'ai un ensemble de tables identiques mais avec des nom différents (préfixées par 01 à 99). Ces tables auront un trigger identique qui exécutera. Ce trigger update un autre table qui est commune au 99 autres mais dans laquelle j'ai une colonne qui contient le nom de la table d'origine. Je voudrais donc créer un trigger 'générique' dont le code pourrait être copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
Merci de vos réponses.
Hervé Rous
Insiprez vous de ce code :
-- le trigger de traçage
ALTER TRIGGER E_UD_APT
ON T_APISTER_APT
FOR UPDATE, DELETE
AS
INSERT INTO T_H_APISTER_APT
SELECT d.*,
CASE
WHEN EXISTS(SELECT *
FROM inserted)
THEN 'U'
ELSE 'D'
END ,
CURRENT_TIMESTAMP,
hostname,
program_name ,
nt_domain,
nt_username,
net_address,
loginame,
s.name --> nom du trigger
FROM deleted AS d
CROSS JOIN master.dbo.sysprocesses as p
CROSS JOIN sysobjects as s --> table système contennt les défintions
d'objets
WHERE p.spid = @@SPID
AND s.id = @@PROCID --> identifiant système de la procédure en cours
(dans notre cas trigger)
Voir le post intitulé "trigger, curseur et création de fichier texte du 18/07.
A +
--
Frédéric BROUARD - MVP SQL Server, expert SGBDR & SQL
Le site SQL et les SGBDR http://sqlpro.developpez.com
Audit, conseil, formation, modélisation, optimisation
=> http://www.datasapiens.com
"Hervé R." a écrit :
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans
les docs etc.. mais j'ai rien trouvé.
J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il
exécute, auriez vous une solution (genre select DB_NAME()).
J'explique un peu pourquoi car ma demande peut passer pour bizarre étant
donné qu'on créé un trigger sur une table donnée...
J'ai un ensemble de tables identiques mais avec des nom différents
(préfixées par 01 à 99). Ces tables auront un trigger identique qui
exécutera.
Ce trigger update un autre table qui est commune au 99 autres mais dans
laquelle j'ai une colonne qui contient le nom de la table d'origine.
Je voudrais donc créer un trigger 'générique' dont le code pourrait être
copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER
UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
-- le trigger de traçage ALTER TRIGGER E_UD_APT ON T_APISTER_APT FOR UPDATE, DELETE AS INSERT INTO T_H_APISTER_APT SELECT d.*, CASE WHEN EXISTS(SELECT * FROM inserted) THEN 'U' ELSE 'D' END , CURRENT_TIMESTAMP, hostname, program_name , nt_domain, nt_username, net_address, loginame, s.name --> nom du trigger FROM deleted AS d CROSS JOIN master.dbo.sysprocesses as p CROSS JOIN sysobjects as s --> table système contennt les défintions d'objets WHERE p.spid = @@SPID AND s.id = @@PROCID --> identifiant système de la procédure en cours (dans notre cas trigger)
Voir le post intitulé "trigger, curseur et création de fichier texte du 18/07.
A +
-- Frédéric BROUARD - MVP SQL Server, expert SGBDR & SQL Le site SQL et les SGBDR http://sqlpro.developpez.com Audit, conseil, formation, modélisation, optimisation => http://www.datasapiens.com
"Hervé R." a écrit :
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans les docs etc.. mais j'ai rien trouvé. J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il exécute, auriez vous une solution (genre select DB_NAME()). J'explique un peu pourquoi car ma demande peut passer pour bizarre étant donné qu'on créé un trigger sur une table donnée... J'ai un ensemble de tables identiques mais avec des nom différents (préfixées par 01 à 99). Ces tables auront un trigger identique qui exécutera. Ce trigger update un autre table qui est commune au 99 autres mais dans laquelle j'ai une colonne qui contient le nom de la table d'origine. Je voudrais donc créer un trigger 'générique' dont le code pourrait être copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
Merci de vos réponses.
Hervé Rous
Hervé R.
J'ai trouvé ma solution....
declare @NOMFIC AS varchar(50) declare @tableid as varchar(50) SELECT @tableid = parent_obj FROM sysobjects WHERE id @@PROCID AND xtype='TR' set @nomfic=object_name(@tableid)
Merci de vos réponses.
"SQLpro" a écrit dans le message de news:
Insiprez vous de ce code :
-- le trigger de traçage ALTER TRIGGER E_UD_APT ON T_APISTER_APT FOR UPDATE, DELETE AS INSERT INTO T_H_APISTER_APT SELECT d.*, CASE WHEN EXISTS(SELECT * FROM inserted) THEN 'U' ELSE 'D' END , CURRENT_TIMESTAMP, hostname, program_name , nt_domain, nt_username, net_address, loginame, s.name --> nom du trigger FROM deleted AS d CROSS JOIN master.dbo.sysprocesses as p CROSS JOIN sysobjects as s --> table système contennt les défintions d'objets WHERE p.spid = @@SPID AND s.id = @@PROCID --> identifiant système de la procédure en cours (dans notre cas trigger)
Voir le post intitulé "trigger, curseur et création de fichier texte du 18/07.
A +
-- Frédéric BROUARD - MVP SQL Server, expert SGBDR & SQL Le site SQL et les SGBDR http://sqlpro.developpez.com Audit, conseil, formation, modélisation, optimisation => http://www.datasapiens.com
"Hervé R." a écrit :
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans les docs etc.. mais j'ai rien trouvé. J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il exécute, auriez vous une solution (genre select DB_NAME()). J'explique un peu pourquoi car ma demande peut passer pour bizarre étant donné qu'on créé un trigger sur une table donnée... J'ai un ensemble de tables identiques mais avec des nom différents (préfixées par 01 à 99). Ces tables auront un trigger identique qui exécutera. Ce trigger update un autre table qui est commune au 99 autres mais dans laquelle j'ai une colonne qui contient le nom de la table d'origine. Je voudrais donc créer un trigger 'générique' dont le code pourrait être copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
Merci de vos réponses.
Hervé Rous
J'ai trouvé ma solution....
declare @NOMFIC AS varchar(50)
declare @tableid as varchar(50)
SELECT @tableid = parent_obj FROM sysobjects WHERE id @@PROCID AND xtype='TR'
set @nomfic=object_name(@tableid)
Merci de vos réponses.
"SQLpro" <SQLpro@discussions.microsoft.com> a écrit dans le message de news:
09867B5F-A88D-430C-A290-FB2244CA4D65@microsoft.com...
Insiprez vous de ce code :
-- le trigger de traçage
ALTER TRIGGER E_UD_APT
ON T_APISTER_APT
FOR UPDATE, DELETE
AS
INSERT INTO T_H_APISTER_APT
SELECT d.*,
CASE
WHEN EXISTS(SELECT *
FROM inserted)
THEN 'U'
ELSE 'D'
END ,
CURRENT_TIMESTAMP,
hostname,
program_name ,
nt_domain,
nt_username,
net_address,
loginame,
s.name --> nom du trigger
FROM deleted AS d
CROSS JOIN master.dbo.sysprocesses as p
CROSS JOIN sysobjects as s --> table système contennt les défintions
d'objets
WHERE p.spid = @@SPID
AND s.id = @@PROCID --> identifiant système de la procédure en cours
(dans notre cas trigger)
Voir le post intitulé "trigger, curseur et création de fichier texte du
18/07.
A +
--
Frédéric BROUARD - MVP SQL Server, expert SGBDR & SQL
Le site SQL et les SGBDR http://sqlpro.developpez.com
Audit, conseil, formation, modélisation, optimisation
=> http://www.datasapiens.com
"Hervé R." a écrit :
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans
les docs etc.. mais j'ai rien trouvé.
J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il
exécute, auriez vous une solution (genre select DB_NAME()).
J'explique un peu pourquoi car ma demande peut passer pour bizarre étant
donné qu'on créé un trigger sur une table donnée...
J'ai un ensemble de tables identiques mais avec des nom différents
(préfixées par 01 à 99). Ces tables auront un trigger identique qui
exécutera.
Ce trigger update un autre table qui est commune au 99 autres mais dans
laquelle j'ai une colonne qui contient le nom de la table d'origine.
Je voudrais donc créer un trigger 'générique' dont le code pourrait être
copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER
UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE
declare @NOMFIC AS varchar(50) declare @tableid as varchar(50) SELECT @tableid = parent_obj FROM sysobjects WHERE id @@PROCID AND xtype='TR' set @nomfic=object_name(@tableid)
Merci de vos réponses.
"SQLpro" a écrit dans le message de news:
Insiprez vous de ce code :
-- le trigger de traçage ALTER TRIGGER E_UD_APT ON T_APISTER_APT FOR UPDATE, DELETE AS INSERT INTO T_H_APISTER_APT SELECT d.*, CASE WHEN EXISTS(SELECT * FROM inserted) THEN 'U' ELSE 'D' END , CURRENT_TIMESTAMP, hostname, program_name , nt_domain, nt_username, net_address, loginame, s.name --> nom du trigger FROM deleted AS d CROSS JOIN master.dbo.sysprocesses as p CROSS JOIN sysobjects as s --> table système contennt les défintions d'objets WHERE p.spid = @@SPID AND s.id = @@PROCID --> identifiant système de la procédure en cours (dans notre cas trigger)
Voir le post intitulé "trigger, curseur et création de fichier texte du 18/07.
A +
-- Frédéric BROUARD - MVP SQL Server, expert SGBDR & SQL Le site SQL et les SGBDR http://sqlpro.developpez.com Audit, conseil, formation, modélisation, optimisation => http://www.datasapiens.com
"Hervé R." a écrit :
Bonjour,
Une petite question concernant les triggers en SQL2000. J'ai cherché dans les docs etc.. mais j'ai rien trouvé. J'ai besoin dans un trigger de connaitre le nom de la table sur lequel il exécute, auriez vous une solution (genre select DB_NAME()). J'explique un peu pourquoi car ma demande peut passer pour bizarre étant donné qu'on créé un trigger sur une table donnée... J'ai un ensemble de tables identiques mais avec des nom différents (préfixées par 01 à 99). Ces tables auront un trigger identique qui exécutera. Ce trigger update un autre table qui est commune au 99 autres mais dans laquelle j'ai une colonne qui contient le nom de la table d'origine. Je voudrais donc créer un trigger 'générique' dont le code pourrait être copié facilement pour toutes les tables.
SET @NOMTABLE= REPONSE_A_ME_DONNER UPDATE TABLECOMMUNE SET ORIGINE=@NOMTABLE