[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