Bonjour,

Nous avons migré un projet .adp tournant avec SQL 2000 vers SQL 2008 R2 en août dernier.
Tout c’est bien passé au début mais depuis quelques temps nous avons des soucis avec des UPDATE dans des trigger.
Avant UPDATE dbo.table SET Toto=’x’ passait sans problème même s’il y avait plusieurs enregistrements de Toto.
Aujourd’hui il faut sélectionner successivement chaque enregistrement pour pouvoir le mettre à jour : UPDATE dbo.table SET Toto=’x’ WHERE ClefToto=1
Quelqu’un aurait-il une idée de ce qui a pu provoquer cela alors que nous n’avons rien changé à la base SQL depuis notre migration ? D’autre part, pour faire cela, j’utilise souvent le type de procédure que je mets en exemple ci-après.
Je charge la clef des enregistrements à mettre à jour dans une table temporaire. Alors que le délai d’expiration des requêtes est fixé à 10 min je me retrouve avec « expiration du délai » bien avant les 10 minutes. De plus dans l’exemple ci-après la table contient environ 35000 enregistrements et bien avant les 10 min j’ai droit au message « délai expiré » ce qui m’oblige à découper le nombre d’enregistrements à traiter avec between.
Si quelqu’un avait une requête plus rapide et performante je suis preneur….
Merci.
Bonne journée

JPaul

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ALTER PROCEDURE zzzavirertrace
AS
DECLARE @tab table(tId_Trace int, tagi bit default(0))
SET NOCOUNT ON
INSERT into @tab(tId_Trace)
SELECT  Id_Trace from dbo.T_Trace where Type_Trace is null and Id_Trace between 80000 and  90000
order by  Id_Trace
while exists(select top 1 tId_Trace  from @tab where tagi=0)
begin
delete dbo.t_trace where  Id_Trace=(select top 1 tId_Trace  from @tab where tagi=0)
update @tab
set tagi=1
where tid_trace=(select top 1 tId_Trace  from @tab where tagi=0) AND tagi=0
end 
RETURN