Cette procédure permet de récupérer la liste des fichiers d’un répertoire sous forme de table.
CREATE PROCEDURE dbo.P_FILES (@DIR VARCHAR(1024))
AS
BEGIN
DECLARE @TF TABLE (FNAME VARCHAR(256), FDATE DATETIME2(0), FSIZE BIGINT)
DECLARE @T TABLE (F VARCHAR(512));
DECLARE @COM VARCHAR(1048);
SET @COM = ' DIR "' + @DIR
+ CASE
WHEN SUBSTRING(@DIR, LEN(@DIR), 1) = '\'
THEN ''
ELSE '\'
END + '*.*"';
INSERT INTO @T
EXEC xp_cmdshell @COM;
DELETE FROM @T WHERE F IS NULL OR SUBSTRING(F, 1, 1) = ' ';
DELETE FROM @T WHERE SUBSTRING(F, 22, 5) = '<REP>';
SET DATEFORMAT DMY;
INSERT INTO @TF
SELECT SUBSTRING(F, 37, 475),
REPLACE(SUBSTRING(F, 1, 17), ' ', ' '),
LTRIM(REPLACE(SUBSTRING(F, 19, 17), CHAR(160), ''))
FROM @T;
SELECT * FROM @TF
END;
GO
EXEC dbo.P_FILES ‘C:\! FB’
Attention : cette fonction n’est valable que pour Windows Server 2008 en version française. Pour d’autres localisation (par exemple US), le tag de répertoire peut être DIR et les dates au format anglais.
Enfin, suivant la version (Windows 2000, 2003, 2008…), la position des éléments textuels peut être légèrement décalé en nombre de caractères.
Pour terminer, notez que le caractère de substitution dans le 3° SUBTRSING n’est pas le caractère espace traditionnel, mais le code ASCII 160 (espace insécable).
————–
Frédéric BROUARD, Spécialiste modélisation, bases de données, optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels : http://sqlpro.developpez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation, tuning, formation
* * * * * Enseignant au CNAM PACA et à l’ISEN à Toulon * * * * *
Voici les commandes qui permettent d’autoriser l’utilisation de xp_cmdshell (désactivé par défaut) :
— To allow advanced options to be changed.
EXEC sp_configure ‘show advanced options’, 1
GO
— To update the currently configured value for advanced options.
RECONFIGURE
GO
— To enable the feature.
EXEC sp_configure ‘xp_cmdshell’, 1
GO
— To update the currently configured value for this feature.
RECONFIGURE
GO
Je ne suis pas experte SQL Server et j’ignorais qu’on pouvais exécuter de tel commande via une procédure stockée !
Merci ! pilpoil ce qu’il me fallait !