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
| SET QUOTED_IDENTIFIER ON
GO
-----------------------------------------------------------------------------------------------------------------------------------------
---- Tables temporaires nécessaires au script (seront supprimées à la fin du traitement)
-----------------------------------------------------------------------------------------------------------------------------------------
CREATE TABLE #TABLE_TEMP1
( DETAIL [VARCHAR] (max),
ID_TRAITEMENT [VARCHAR] (128)
)
CREATE TABLE #TABLE_TEMP2
( ENTITE [VARCHAR] (128),
TRAITEMENT_LIBELLE [VARCHAR] (128),
DETAIL [VARCHAR] (max) ,
)
-----------------------------------------------------------------------------------------------------------------------------------------
---- Déclaration des variables et du curseur
-----------------------------------------------------------------------------------------------------------------------------------------
DECLARE @ID_TRAITEMENT NVARCHAR(MAX)
DECLARE @GETID CURSOR
SET @GETID = CURSOR FOR
--------------------------------------------------------------
---- Liste des ID en erreur trouvés
--------------------------------------------------------------
SELECT DISTINCT S.ID
FROM TTRAITEMENT
WHERE statut = 'échec'
-----------------------------------------------------------------------------------------------------------------------------
---- Lancement du curseur pour boucler sur chaque ID trouvé
-----------------------------------------------------------------------------------------------------------------------------
OPEN @GETID
FETCH NEXT
FROM @GETID INTO @ID_TRAITEMENT
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @SOURCE NVARCHAR(MAX)
DECLARE @SEPARATEUR CHAR(2)
DECLARE @CHAINEXML XML
DECLARE @CHAINE NVARCHAR(MAX)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------- Construction de la chaine XML avec le retraitement des retours chariot en balise
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
SET @SOURCE= (SELECT DETAIL FROM TTRAITEMENT WHERE TTRAITEMENT.ID = @ID_TRAITEMENT)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------- Variable permettant de retraiter dans l'étape suivante les retour chariot présent dans le resultat @source
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
SET @SEPARATEUR = CHAR(13)+CHAR(10)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------- Construction de la chaine XML avec le retraitement des retours chariot en balise
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT @CHAINEXML = CONVERT(XML,'<ROOT><NIVEAU>' + REPLACE(@SOURCE,@SEPARATEUR,'</NIVEAU> <NIVEAU>') + '</NIVEAU></ROOT>')
--------------------------------------------------------------------------------------------------------------------------------------------
--------- Stockage du résultat de la chaine XML dans une table temporaire #TABLE_TEMP1
--------------------------------------------------------------------------------------------------------------------------------------------
INSERT INTO #TABLE_TEMP1
(DETAIL,
ID_TRAITEMENT)
SELECT VALUE AS DETAIL,
@ID_TRAITEMENT AS ID_TRAITEMENT
FROM (
SELECT [VALUE] = RESULTAT.C.value('.','VARCHAR(250)')
FROM @CHAINEXML.nodes('/ROOT/NIVEAU') RESULTAT(C)
) T1
WHERE T1.VALUE LIKE 'Erreur sur la ligne : %'
FETCH NEXT
FROM @GETID INTO @ID_TRAITEMENT
END
CLOSE @GETID
DEALLOCATE @GETID
---------------------------------------------------------------------------------------------------------------------------------------------------------------
--------- Enrichissement des informations présentes dans la table #TABLE_TEMP1
---------------------------------------------------------------------------------------------------------------------------------------------------------------
INSERT INTO #TABLE_TEMP2
(DETAIL,
TRAITEMENT_LIBELLE,
ENTITE)
SELECT T1.DETAIL , T2.LIBELLE, T3.LIBELLE
FROM #TABLE_TEMP1 T1
INNER JOIN TTRAITEMENT T2 ON T1.ID_TRAITEMENT =T2.ID
INNER JOIN TSOCIETE T3 ON T2.ID_SOCIETE = T3.ID
SELECT * FROM #TABLE_TEMP2 |
Partager