[SQL Server] Comparer le résulat de la commande DOS DIR avec le contenu d'une table

-- Author:        Zouhaier KHARROUBI

-- Create date: 02/12/2015

-- Description:   Comparer le résulat de la commande DOS DIR avec le contenu d'une table

-- =============================================

CREATE PROCEDURE [dbo].[usp_Comparer_ResDIR_Table]

      -- Add the parameters for the stored procedure here

AS

BEGIN

      -- SET NOCOUNT ON added to prevent extra result sets from

      -- interfering with SELECT statements.

      SET NOCOUNT ON;

   -- Insert statements for procedure here

      IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id = object_id(N'[tempdb]..[#Fichiers]'))

      BEGIN

            DROP TABLE #Fichiers

      END  

      IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id = object_id(N'[tempdb]..[#Fichiers1]'))

      BEGIN

            DROP TABLE #Fichiers1

      END  

           

      IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id = object_id(N'[tempdb]..[#Fichiers2]'))

      BEGIN

            DROP TABLE #Fichiers2

      END  

           

      CREATE TABLE #Fichiers

      (

            NomFichier VARCHAR(250)

      )

      CREATE TABLE #Fichiers1

      (

            NomFichier VARCHAR(250)

      )

     

      CREATE TABLE #Fichiers2

      (

            NomFichier VARCHAR(250)

      )

     

      --Démapper les lecteursréseaux

      EXEC Master..xp_cmdshell'NET use U: "\\MEKTABA\DOCUMENTS_1\Archive" /delete'

      EXEC Master..xp_cmdshell'NET use Q: "\\MEKTABA\DOCUMENTS_2\Archive" /delete'

     

      --Mapper les lecteurs réseaux

      EXEC Master..xp_cmdshell'NET use U: "\\MEKTABA\DOCUMENTS_1\Archive"'

      EXEC Master..xp_cmdshell'NET use Q: "\\MEKTABA\DOCUMENTS_2\Archive"'

     

      --Envoyre le premier résultat de la commande DIR vers la table temporaire

   INSERT INTO #Fichiers

      EXEC Master..xp_cmdshellN'DIR U:\*.jpg /B /S'

     

      --Envoyre le deuxième résultat de la commande DIR vers la table temporaire

      INSERT INTO #Fichiers

      EXEC Master..xp_cmdshellN'DIR Q:\*.jpg /B /S'

     

      --Démapper les lecteursréseaux

      EXEC Master..xp_cmdshell'NET use U: "\\MEKTABA\DOCUMENTS_1\Archive" /delete'

      EXEC Master..xp_cmdshell'NET use Q: "\\MEKTABA\DOCUMENTS_2\Archive" /delete'

      --récuperer les noms des fichiers sans les chemins  

      INSERT INTO #Fichiers1

      SELECT REVERSE(SUBSTRING(REVERSE(NomFichier),1,CHARINDEX('\',REVERSE(NomFichier),1) -1)) NomFichier from #Fichiers

      WHERE NomFichier IS NOT NULL

      ORDER BY NomFichier

        

      -- Insérer des fichiers exemples vers la table temporaire à comparer avec le résultat de la commande DIR

      INSERT INTO #Fichiers2(NomFichier ) VALUES ('image_1.jpg');

      INSERT INTO #Fichiers2(NomFichier ) VALUES ('image_2.jpg');

      INSERT INTO #Fichiers2(NomFichier ) VALUES ('image_3.jpg');

      INSERT INTO #Fichiers2(NomFichier ) VALUES ('image_4.jpg');

      INSERT INTO #Fichiers2(NomFichier ) VALUES ('image_5.jpg');

      INSERT INTO #Fichiers2(NomFichier ) VALUES ('image_6.jpg');

      INSERT INTO #Fichiers2(NomFichier ) VALUES ('image_7.jpg');

      INSERT INTO #Fichiers2(NomFichier ) VALUES ('image_8.jpg');

      INSERT INTO #Fichiers2(NomFichier ) VALUES ('image_9.jpg');

      INSERT INTO #Fichiers2(NomFichier ) VALUES ('image_10.jpg');

      --Afficher les images trouvées dans la table #Fichiers2 et non trouvées dans le résulat de la commande DIR

      SELECT * FROM

      (

      SELECT T1.NomFichier, T2.NomFichier T2_NomFichier FROM #Fichiers2 T1

      LEFT JOIN #Fichiers1 T2 on LTRIM(RTRIM(T2.NomFichier))=LTRIM(RTRIM(T1.NomFichier))

      ) T WHERE T2_NomFichier IS NULL

      --Afficher les images trouvées dans la table #Fichiers2 et trouvées dans le résulat de la commande DIR

      SELECT T1.NomFichier, T2.NomFichier T2_NomFichier FROM #Fichiers2 T1

      JOIN #Fichiers1 T2 on LTRIM(RTRIM(T2.NomFichier))=LTRIM(RTRIM(T1.NomFichier))

                 

           

      DROP TABLE #Fichiers

      DROP TABLE #Fichiers1

      DROP TABLE #Fichiers2

END