OVH Cloud OVH Cloud

Trigger Erreur

3 réponses
Avatar
John Doe
Bonjour,

J'ai un trigger qui doit modifier l'enregistrement inséré
Quand j'insère enreg1 dans table 1, enreg1.champ1='1'

J'ai toujours le problème suivant :
[Microsoft][ODBC SQL Server Driver]La connexion est occupée avec les
résultats d'un autre hstmt

Merci

3 réponses

Avatar
bruno reiter [MVP]
peux-tu poster le contenu du trigger?

br

"John Doe" wrote in message
news:
Bonjour,

J'ai un trigger qui doit modifier l'enregistrement inséré
Quand j'insère enreg1 dans table 1, enreg1.champ1='1'

J'ai toujours le problème suivant :
[Microsoft][ODBC SQL Server Driver]La connexion est occupée avec les
résultats d'un autre hstmt

Merci


Avatar
John Doe
ci après un des 2 triggers incriminés

En fait, on met à jour dans un processus la table 1 (poste_de_travail), puis
la table 2 (poste_caracpw) et en fonction de la valeur insérée dans la table
2, le trigger met à jour un champ de la table 1. Et là, ça marche pas.
Sous Oracle, cela fonctionne bien pourtant.

drop trigger TRIG_POSTE_CARACPW
go

CREATE TRIGGER TRIG_POSTE_CARACPW ON POSTE_CARACPW
FOR INSERT, UPDATE
AS
declare
@vcode_sit varchar(10), @vcode_cw varchar(10), @vcode_w varchar(10),
@vdes_carw varchar(255)
begin
select @vcode_cw = code_cw, @vdes_carw = des_carw, @vcode_w = code_w from
inserted
if (@vcode_cw='0000000004' and @vdes_carw is not null)
set @vdes_carw =
substring(@vdes_carw,1,(charindex('.',@vdes_carw)))+substring((substring(@vdes_carw,(charindex('.',@vdes_carw)+1),10)),1,charindex('.',substring(@vdes_carw,(charindex('.',@vdes_carw)+1),10))-1)
if (@vdes_carw is not null)
select @vcode_sit = code_sit from site where
rtrim(chpar1)=rtrim(@vdes_carw) or rtrim(chpar2)=rtrim(@vdes_carw) or
rtrim(chpar2)=rtrim(@vdes_carw) or rtrim(chpar4)=rtrim(@vdes_carw) or
rtrim(chpar5)=rtrim(@vdes_carw)
update poste_de_travail set code_sit = @vcode_sit where
poste_de_travail.code_w=@vcode_w
end
go



"bruno reiter [MVP]" a écrit :

peux-tu poster le contenu du trigger?

br

"John Doe" wrote in message
news:
> Bonjour,
>
> J'ai un trigger qui doit modifier l'enregistrement inséré
> Quand j'insère enreg1 dans table 1, enreg1.champ1='1'
>
> J'ai toujours le problème suivant :
> [Microsoft][ODBC SQL Server Driver]La connexion est occupée avec les
> résultats d'un autre hstmt
>
> Merci





Avatar
Fred BROUARD
L'encodage de votre trigger est illogique!!!
La présence de variable locale dans un trigger est généralement signe d'hérésie...

En effet un trigger se déclenche UNE SEULE FOIS même si l'ordre SQL qui l'a
lancé concerne trois millions de lignes !
Autrement dit TOUT TRAITEMENT dans un trigger doit être réalisé en logique
ENSEMBLISTE.

Votre trigger doit donc être codé de la sorte :

CREATE TRIGGER TRIG_POSTE_CARACPW
ON POSTE_CARACPW
FOR INSERT, UPDATE
AS

UPDATE poste_de_travail
SET code_sit = code_sit
FROM INSERTED i
INNER JOIN site s
ON i.??? = s.???
INNER JOIN poste_de_travail p
ON ???
WHERE p.code_w = i.code_cw
...

et ne contenir aucune variable locale.

Difficile de vous aider plus sans la description complète des tables avec PK, FK
et sémantique.

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************


John Doe a écrit:
ci après un des 2 triggers incriminés

En fait, on met à jour dans un processus la table 1 (poste_de_travail), puis
la table 2 (poste_caracpw) et en fonction de la valeur insérée dans la table
2, le trigger met à jour un champ de la table 1. Et là, ça marche pas.
Sous Oracle, cela fonctionne bien pourtant.

drop trigger TRIG_POSTE_CARACPW
go

CREATE TRIGGER TRIG_POSTE_CARACPW ON POSTE_CARACPW
FOR INSERT, UPDATE
AS
declare
@vcode_sit varchar(10), @vcode_cw varchar(10), @vcode_w varchar(10),
@vdes_carw varchar(255)
begin
select @vcode_cw = code_cw, @vdes_carw = des_carw, @vcode_w = code_w from
inserted
if (@vcode_cw='0000000004' and @vdes_carw is not null)
set @vdes_carw =
substring(@vdes_carw,1,(charindex('.',@vdes_carw)))+substring((substring(@vdes_carw,(charindex('.',@vdes_carw)+1),10)),1,charindex('.',substring(@vdes_carw,(charindex('.',@vdes_carw)+1),10))-1)
if (@vdes_carw is not null)
select @vcode_sit = code_sit from site where
rtrim(chpar1)=rtrim(@vdes_carw) or rtrim(chpar2)=rtrim(@vdes_carw) or
rtrim(chpar2)=rtrim(@vdes_carw) or rtrim(chpar4)=rtrim(@vdes_carw) or
rtrim(chpar5)=rtrim(@vdes_carw)
update poste_de_travail set code_sit = @vcode_sit where
poste_de_travail.code_w=@vcode_w
end
go



"bruno reiter [MVP]" a écrit :


peux-tu poster le contenu du trigger?

br

"John Doe" wrote in message
news:

Bonjour,

J'ai un trigger qui doit modifier l'enregistrement inséré
Quand j'insère enreg1 dans table 1, enreg1.champ1='1'

J'ai toujours le problème suivant :
[Microsoft][ODBC SQL Server Driver]La connexion est occupée avec les
résultats d'un autre hstmt

Merci