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
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
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" <JohnDoe@discussions.microsoft.com> wrote in message
news:2E92D14C-636A-4607-9834-3E5596BCF2DD@microsoft.com...
> 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
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
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
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" <JohnDoe@discussions.microsoft.com> wrote in message
news:2E92D14C-636A-4607-9834-3E5596BCF2DD@microsoft.com...
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
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