-- Récupération de la valeur MAX du compteur CPT001 dans la table COUNTER DECLARE @COUNTER AS VARCHAR(10) SET @COUNTER = (SELECT VALUE FROM [COUNTER] WHERE [COUNTER] = 'CPT001' AND DATE_COUNTER IN (SELECT MAX(DATE_COUNTER) FROM [COUNTER] WHERE [COUNTER] = 'CPT001')) -- Récupération du nombre de lignes dans la vue VIEW_LAB_ANALYSE DECLARE @VIEW AS VARCHAR(10) SET @VIEW = (SELECT COUNT(*) FROM VIEW_LAB_ANALYSE) -- Si le nombre de lignes dans la vue est supérieur à la valeur du compteur CPT001 IF @COUNTER < @VIEW BEGIN -- Déclaration d'un curseur qui extrait les différentes types du stock : L, H, C, S DECLARE @TYPE VARCHAR(5) DECLARE CURSEUR CURSOR FOR SELECT DISTINCT(TYPE_STOCK) AS TYPE FROM VIEW_LAB_ANALYSE ORDER BY TYPE_STOCK OPEN CURSEUR FETCH NEXT FROM CURSEUR INTO @TYPE WHILE @@FETCH_STATUS = 0 BEGIN -- Pour chaques type : extraction d'un fichier texte avec la commande BCP (dans le dossier Roots ...) DECLARE @SQL VARCHAR(200) DECLARE @SQL2 VARCHAR(200) SET @SQL = '"SELECT * FROM MASDB_LAB..VIEW_LAB_ANALYSE WHERE TYPE_STOCK = ''''' + @TYPE + ''''' ORDER BY CODE_EXP"' SET @SQL2 = 'BCP ' + @SQL+ ' QUERYOUT d:\Roots\distance\data\' + @TYPE + '.txt -c -T' SET @SQL2 = N'EXEC XP_CMDSHELL ' +''''+ @SQL2 +'''' EXEC (@SQL2) -- Ré-initialisation de la variable @SQL2 SET @SQL2 = '' FETCH NEXT FROM CURSEUR INTO @TYPE END CLOSE CURSEUR DEALLOCATE CURSEUR SET @TYPE = '' -- Vide la table qui va recevoir les enregistrements à l'aide d'un BULK INSERT TRUNCATE TABLE LAB_DISTANCE -- Déclaration d'un curseur sur tous les fichiers résultats à générer : LL.txt -- (compteur CPT002 stockant les libéllés des fichiers) DECLARE @FILE VARCHAR(20) DECLARE CURSEUR2 CURSOR FOR SELECT LIBELLE FROM [COUNTER] WHERE [COUNTER] = 'CPT002' ORDER BY VALUE OPEN CURSEUR2 FETCH NEXT FROM CURSEUR2 INTO @FILE WHILE @@FETCH_STATUS = 0 BEGIN -- Exécution en SHELL d'un script PHP (calculs sauvegardés dans les fichiers résultats) DECLARE @DISTANCE VARCHAR(100); SET @DISTANCE = 'PHP d:\Roots\distance\distance.php ' + @FILE + '.txt install ' SET @DISTANCE = 'EXEC XP_CMDSHELL ' + '''' + @DISTANCE + '''' EXEC (@DISTANCE) -- Insertion du fichier résultat dans la table LAB_DISTANCE DECLARE @BULK VARCHAR(100); SET @BULK = 'BULK INSERT LAB_DISTANCE FROM ''D:\Roots\distance\result\' + convert(char(2),@FILE,1) + '.txt''' EXEC(@BULK) FETCH NEXT FROM CURSEUR2 INTO @FILE END CLOSE CURSEUR2 DEALLOCATE CURSEUR2 -- Mise à jour du compteur de ligne dans la table COUNTER INSERT INTO COUNTER ([COUNTER],VALUE,DATE_COUNTER,LIBELLE) VALUES ('CPT001',@VIEW,GETDATE(),'DISTANCE') END