Bonjour à tous,
J'ai mis en place un fech dans une procédure stockée, qui, après avoir lu une table, exporte des données dans un fichier texte différent à chaque itération.
Le première itération se passe toujours bien, le fichier est correctement écrit dans le répertoire désigné.
A partir de la seconde boucle, même si la préparation de l'exportation se déroule normalement, le nouveau fichier n'est plus créé.
Je ne comprends pas pourquoi, peut-être thread bloqué ou autre process ...
voilà un exemple de mon code
Merci pour votre aide
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 ALTER PROCEDURE [dbo].[ps_EDI_LAUCH_INVOIC] @p_sENV varchar(30) AS DECLARE @iENTFAC_NUMFAC int --traitement edi DECLARE @sRESULT char(16) DECLARE @sREP varchar(150) DECLARE @sCMD varchar(2000) DECLARE @sNOMFIC varchar(50) --initialisation de la commande BCP SET @sCMD = 'master..xp_cmdshell ''BCP "SELECT FLIGNE FROM KLAUS.dbo.EDIJDE_FICHIERS WHERE DOCNUM = #document#" queryout "#fichier#" -c -t; -T -Usa -SWIPRD065''' SELECT @sREP = PARAM.ZONEPAR1+'\' FROM PARAM WHERE PARAM.TYPEPAR = 'EDIREP' AND PARAM.CODEPAR = @p_sENV SET NOCOUNT ON DECLARE curseur CURSOR FOR SELECT TOP 1 ENTFAC.NUMFAC FROM ENTFAC WITH (NOLOCK) INNER JOIN EDIJDE_PARTN WITH (NOLOCK) ON EDIJDE_PARTN.CLIENT = ENTFAC.CLIFAC AND EDIJDE_PARTN.DIVISION = ENTFAC.DIVISION AND EDIJDE_PARTN.MESCOD = 'INVOIC01' AND EDIJDE_PARTN.ACTIVE = '1' WHERE ENTFAC.TOPEDI <> '2' AND ENTFAC.TOPCOMPTA = '1' ORDER BY NUMFAC OPEN curseur FETCH NEXT FROM curseur INTO @iENTFAC_NUMFAC WHILE (@@FETCH_STATUS <> -1) BEGIN IF (@@FETCH_STATUS <> -2) BEGIN EXECUTE dbo.ps_EDIJDE_INVOIC @iENTFAC_NUMFAC, @sRESULT OUTPUT IF (@sRESULT IS NOT NULL) BEGIN PRINT @sRESULT --préparer le nom du fichier SELECT @sNOMFIC = 'INVOIC01_'+CAST(@iENTFAC_NUMFAC AS varchar)+'_'+dbo.fn_UserDateTime('DATETIME',GETDATE())+'.txt' --le chemin de collecte SET @sREP = @sREP+@sNOMFIC SET @sCMD = REPLACE(@sCMD, '#document#', @sRESULT) SET @sCMD = REPLACE(@sCMD, '#fichier#', @sREP) EXECUTE (@sCMD) -- SELECT @sCMD --mettre à jour les fichiers log UPDATE EDIJDE_FICHIERS SET NOMFIC = @sNOMFIC, STATUS = '50' WHERE DOCNUM = @sRESULT UPDATE EDIJDE_DOC SET STATUS = '50' WHERE DOCNUM = @sRESULT --mettre à jour la facture UPDATE ENTFAC SET ENTFAC.TOPEDI = '2', ENTFAC.DOCNUM = @sRESULT WHERE ENTFAC.NUMFAC = @iENTFAC_NUMFAC END ELSE BEGIN UPDATE EDIJDE_FICHIERS SET NOMFIC = @sNOMFIC, STATUS = '59' WHERE DOCNUM = @sRESULT UPDATE EDIJDE_DOC SET STATUS = '59' WHERE DOCNUM = @sRESULT END END FETCH NEXT FROM curseur INTO @iENTFAC_NUMFAC END DEALLOCATE curseur SET NOCOUNT OFF
Partager