OVH Cloud OVH Cloud

dbcc iputBuffer() dans un trigger

2 réponses
Avatar
Christophe
J'ai un trigger

dans lequel je veux recuperer la commande SQL qui à l'origine du
declenchement du trigger !
comment puis je faire, car je ne recupere pas la bonne commande ?
Ch.

2 réponses

Avatar
Rudi Bruchez
Christophe a écrit:

dans lequel je veux recuperer la commande SQL qui à l'origine du
declenchement du trigger !
comment puis je faire, car je ne recupere pas la bonne commande ?



Rebonjour,

le DBCC INPUTBUFFER te retourne une commande de ton trigger, c'est ça ?
DBCC INPUTBUFFER n'a aucune fiabilité, il te retourne ce qui reste dans ton
buffer. Tu n'as pas de moyen fiable de connaître la requête qui a déclenché
le trigger.

Tu peux essayer de jouer avec fn_get_sql (disponible depuis le sp3 de SQL
2000) :

(code emprunté à Kalen Delaney)
-- code start --
DECLARE @Handle binary(20), @start int, @end int
SELECT @Handle = sql_handle, @start = stmt_start, @end = stmt_end
FROM master..sysprocesses WHERE spid = @@SPID
IF NOT EXISTS (SELECT * FROM ::fn_get_sql(@Handle)) PRINT 'Handle not
found in cache'
ELSE
SELECT 'Current statement' substring(text, (@start + 2)/2,
CASE @end
WHEN -1 THEN (datalength(text))
ELSE (@end + 2)/2
END)

FROM ::fn_get_sql(@Handle)
-- code end --

Ou avec SQL server 2005, la fonction sys.dm_exec_sql_text
http://msdn2.microsoft.com/fr-fr/library/ms181929.aspx

Mais cela ne va probablement toujours pas répondre à ton problème et te
retourner un peu la même chose. Donc, en conclusion, à l'exception de ces
bricolages, il n'y a pas de moyen. Tu peux par contre tracer des choses
intéressantes : le hostname, le user, ...
SELECT HOST_NAME(), SYSTEM_USER

--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
Avatar
Christophe
arf flute dommage j'aurais biena imé avoir la commande qui l'a declenché !
je vais regarder du coté de fn_get_sql

"Rudi Bruchez" <"rudi#nospam#[at]babaluga.com"> a écrit dans le message de
news:
Christophe a écrit:

> dans lequel je veux recuperer la commande SQL qui à l'origine du
> declenchement du trigger !
> comment puis je faire, car je ne recupere pas la bonne commande ?

Rebonjour,

le DBCC INPUTBUFFER te retourne une commande de ton trigger, c'est ça ?
DBCC INPUTBUFFER n'a aucune fiabilité, il te retourne ce qui reste dans


ton
buffer. Tu n'as pas de moyen fiable de connaître la requête qui a


déclenché
le trigger.

Tu peux essayer de jouer avec fn_get_sql (disponible depuis le sp3 de SQL
2000) :

(code emprunté à Kalen Delaney)
-- code start --
DECLARE @Handle binary(20), @start int, @end int
SELECT @Handle = sql_handle, @start = stmt_start, @end = stmt_end
FROM master..sysprocesses WHERE spid = @@SPID
IF NOT EXISTS (SELECT * FROM ::fn_get_sql(@Handle)) PRINT 'Handle not
found in cache'
ELSE
SELECT 'Current statement' > substring(text, (@start + 2)/2,
CASE @end
WHEN -1 THEN (datalength(text))
ELSE (@end + 2)/2
END)

FROM ::fn_get_sql(@Handle)
-- code end --

Ou avec SQL server 2005, la fonction sys.dm_exec_sql_text
http://msdn2.microsoft.com/fr-fr/library/ms181929.aspx

Mais cela ne va probablement toujours pas répondre à ton problème et te
retourner un peu la même chose. Donc, en conclusion, à l'exception de ces
bricolages, il n'y a pas de moyen. Tu peux par contre tracer des choses
intéressantes : le hostname, le user, ...
SELECT HOST_NAME(), SYSTEM_USER

--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/