Bonjour, je souhaite remonter des informations présentent dans une base de donnée Access vers notre serveur SQL. pour ce faire j'utilise le code ci-dessous.

Toutefois je trouve l'ensemble plutôt lent. Ces la première fois que j'utilise Transact-SQL. Si quelqu'un pouvez me corriger.


Cdt Jean-François


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
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
 
	/* On supprimer le lien avec le serveur LullyResultat */
EXEC sp_dropserver 'LullyResultat', 'droplogins'
GO
 
	/* On creer un lien avec la base de donnée ACCESS */
EXEC sp_addlinkedserver 
   @server = N'LullyResultat', 
   @provider = N'Microsoft.Jet.OLEDB.4.0', 
   @srvproduct = N'OLE DB Provider for Jet',
   @datasrc = N'D:\SQL-Micrologic\4F\resultatlully.mdb';
GO
 
Print 'Debut de déclaration des variables'
 
DECLARE @Adatemarq as datetime
DECLARE @Anumserie as int
DECLARE @Anumuv as int
DECLARE @Adateres as char(25)
DECLARE @Aresultat as int
DECLARE @Atestdef as int
DECLARE @Aindexres as int
DECLARE @Tindexres as int
DECLARE @Tnumtest as int
DECLARE @Tresultat as int
DECLARE @Tval1 as float
DECLARE @Tval2 as float
DECLARE @Tval3 as float
DECLARE @Tval4 as float
DECLARE @Tval5 as float
DECLARE @Tval6 as float
DECLARE @Tval7 as float
DECLARE @Tval8 as float
DECLARE @Tval9 as float
DECLARE @Tval10 as float
DECLARE @Tval11 as float
DECLARE @Tval12 as float
DECLARE @Tval13 as float
DECLARE @OldNumSerie as int
 
	-- Delclaration du curseur, avec ça requéte
DECLARE MyCursor CURSOR FOR
	SELECT Appareil.datemarq, Appareil.numserie, Appareil.numuv, Appareil.dateres, Appareil.resultat, Appareil.testdef, 
		Appareil.indexres, TEST.indexres, TEST.numtest, TEST.resultat, TEST.val1, TEST.val2, TEST.val3, 
		TEST.val4, TEST.val5, TEST.val6, TEST.val7, TEST.val8, TEST.val9, TEST.val10, TEST.val11, TEST.val12, TEST.val13
		FROM LullyResultat...Appareil LEFT JOIN LullyResultat...TEST ON Appareil.indexres = TEST.indexres 
		WHERE Appareil.numserie>0 AND Appareil.numuv>0 AND Appareil.datemarq>='20/05/2011' ORDER BY Appareil.numserie, Appareil.datemarq
 
		-- ouverture du curseur
    OPEN MyCursor 
 
	-- Initialisation du numero de serie
Set @OldNumSerie=0
 
	-- On remplie avec les premiéres données reçus
FETCH  MyCursor INTO @Adatemarq, @Anumserie, @Anumuv, @Adateres, @Aresultat, @Atestdef, @Aindexres, @Tindexres, @Tnumtest,
					@Tresultat, @Tval1, @Tval2, @Tval3, @Tval4, @Tval5, @Tval6, @Tval7, @Tval8, @Tval9, @Tval10, @Tval11, @Tval12, @Tval13
 
Print 'Début de la boucle'
WHILE @@fetch_Status = 0
	BEGIN
			-- si le ces un nouveau produit
		IF @OldNumSerie != @Anumserie
			BEGIN
					-- Memorise le numero de serie
				Set @OldNumSerie = @Anumserie
 
					-- Insertion du produit dans la table declencheurs
				INSERT INTO [WXFR69123D\SQLEXPRESS].[Lully].[dbo].Declencheurs 
							([Date], [N_Serie], [N_UV], [res1], [res2], [res3], [res4], [res5], [res6], [res7], [res8], [res9], [res10],
									[res11], [res12], [res13], [res14], [res15], [res16], [res17], [res18], [res19], [res20], [pris_en_compte]) 
							VALUES (CAST(RIGHT(@Adateres,21) AS DATETIME), @Anumserie, @Anumuv, @Aresultat, @Atestdef, 0, @Anumuv, 
									0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1)
			END
 
			-- Insertion des controles liés au produit dans la table TESTS
		IF @Aresultat=2 AND @Atestdef = @Tnumtest
				-- Test Defectueux
			INSERT INTO [WXFR69123D\SQLEXPRESS].[Lully].[dbo].TESTS 
							([Date], [N_Serie], [N_UV], [N_TEST], [N_Testeur], [pris_en_compte], [Perturbant], 
							[res1], [res2], [res3], [res4], [res5], [res6], [res7], [res8], [res9], [res10],
									[res11], [res12], [res13], [res14], [res15], [res16], [res17], [res18], [res19], [res20]) 
							VALUES (CAST(RIGHT(@Adateres,21) AS DATETIME), @Anumserie, @Anumuv, @Tnumtest, 1, 0, 0, 2, @Tval1, @Tval2, @Tval3, @Tval4,
									@Tval5, @Tval6, @Tval7, @Tval8, @Tval9, @Tval10, @Tval11, @Tval12, @Tval13, 0, 0, 0, 0,  @TResultat, 0)
		Else
				-- Test bon
			INSERT INTO [WXFR69123D\SQLEXPRESS].[Lully].[dbo].TESTS 
							([Date], [N_Serie], [N_UV], [N_TEST], [N_Testeur], [pris_en_compte], [Perturbant], 
							[res1], [res2], [res3], [res4], [res5], [res6], [res7], [res8], [res9], [res10],
									[res11], [res12], [res13], [res14], [res15], [res16], [res17], [res18], [res19], [res20]) 
							VALUES (CAST(RIGHT(@Adateres,21) AS DATETIME), @Anumserie, @Anumuv, @Tnumtest, 1, 0, 0, 1, @Tval1, @Tval2, @Tval3, @Tval4,
									@Tval5, @Tval6, @Tval7, @Tval8, @Tval9, @Tval10, @Tval11, @Tval12, @Tval13, 0, 0, 0, 0,  @TResultat, 0)
 
			-- Données suivantes
		FETCH MyCursor INTO @Adatemarq, @Anumserie, @Anumuv, @Adateres, @Aresultat, @Atestdef, @Aindexres, @Tindexres, 
							@Tnumtest, @Tresultat, @Tval1, @Tval2, @Tval3, @Tval4, @Tval5, @Tval6, @Tval7, 
							@Tval8, @Tval9, @Tval10, @Tval11, @Tval12, @Tval13
	END
 
	-- Fermeture du curseur, libération de la memoire
CLOSE myCursor
DEALLOCATE myCursor
 
Print '----------------- Terminé ------------------------'