Bonjour,

Voila quelque jours que je sèche sur un problème.

PS je suis en SQL SERVER 2000 pour mon plus grand malheur.

Dans mon application, je dois transférer des données en mes tables fronts et mon middle office. Rien de bien difficile.
En trois instructions c'était fait.

Mais depuis peu il y a des erreurs qui survienne pendant le l'insertion qui bloc tout le transfert.
Je dois donc logger les lignes qui font ****.
A partir de la je bloque.

Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
SET CURSOR_CLOSE_ON_COMMIT OFF
DECLARE @var as varchar(20)
DECLARE KEY_Cursor CURSOR FOR 
	SELECT maKey FROM ...
 
OPEN KEY_Cursor;
Print 'open curseur' 	
FETCH NEXT FROM KEY_Cursor  
INTO @var
Print 'Fetch into done' 	
 
WHILE @@FETCH_STATUS = 0
	BEGIN
	BEGIN TRAN	
	SET @err=0
 
	INSERT Commande
	SET @err = @@ERROR
 
	IF @err <> 0 
	BEGIN
		ROLLBACK TRAN 
		SET @nbErr = @nbErr + 1
		INSERT INTO TAB_LOG
		FETCH NEXT FROM KEY_Cursor INTO @var
		CONTINUE
	END
 
	INSERT Article
	SET @err = @@ERROR
 
	IF @err <> 0 
	BEGIN
		ROLLBACK TRAN 
		SET @nbErr = @nbErr + 1
		INSERT INTO TAB_LOG
		FETCH NEXT FROM KEY_Cursor INTO @var
		CONTINUE
	END
 
	INSERT Livraison
	SET @err = @@ERROR
 
	IF @err <> 0 
	BEGIN
		ROLLBACK TRAN 
		SET @nbErr = @nbErr + 1
		INSERT INTO TAB_LOG
		FETCH NEXT FROM KEY_Cursor INTO @var
		CONTINUE
	END
 
	COMMIT TRANSACTION 
 
	FETCH NEXT FROM KEY_Cursor 
	INTO @var
END
 
CLOSE KEY_Cursor;
DEALLOCATE KEY_Cursor;
SET CURSOR_CLOSE_ON_COMMIT ON


Pour pouvoir savoir quel ligne me bloque je suis bien obliger de passer par un curseur non ?


Après mon problème actuel c'est que lorsque je commit dans mon curseur les lignes valides, il se ferme au premier COMMIT, j'ai lu sur internet que c'était un comportement normal.
J'ai donc essayé de faire des SAVE TRAN les lignes valide et de COMMIT une fois sortie de mon WHILE mais il me dit que la TRANSACTION n'existe pas.

Bref je suis pas assez calé en SQL. On m'a toujours dit que les Curseur c’était le mal et après toutes les page que je lis depuis 2 jours j'ai encore plus de raison de le croire mais la je ne vois pas comment faire autrement.

Sur ce merci d'avance pour vos propositions.