OVH Cloud OVH Cloud

[TSQL] - Scruter un répertoire

4 réponses
Avatar
LM
Bonsoir à tous,

J'aurais aimé savoir comment, depuis une procédure stockée en TSQL, scruter
un répertoire.
Pour exemple, cela est possible en VB avec Dir(C:\*.*). L'équivalent est il
possible sous SQL Server ? Le but étant de retourner tous les noms de
fichiers présents dans un répertoire dans une boucle.

D'avance merci

Laurent

4 réponses

Avatar
Fred BROUARD
LM a écrit :
Bonsoir à tous,

J'aurais aimé savoir comment, depuis une procédure stockée en TSQL, scruter
un répertoire.
Pour exemple, cela est possible en VB avec Dir(C:*.*). L'équivalent est il
possible sous SQL Server ? Le but étant de retourner tous les noms de
fichiers présents dans un répertoire dans une boucle.

D'avance merci

Laurent




EXEC master.dbo.xp_cmdshell 'DIR C:TEMP*.*'

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
LM
Merci pour cette information, cependant je connaissais cette proc stockée.
Le problème étant que je ne sais pas l'exploiter. Pouvez vous me dire
comment je peux récupérer séquentiellement les noms de fichiers listés dans
une variable ?
D'avance merci !
Laurent

"Fred BROUARD" a écrit dans le message de news:
eaK%
LM a écrit :
Bonsoir à tous,

J'aurais aimé savoir comment, depuis une procédure stockée en TSQL,
scruter un répertoire.
Pour exemple, cela est possible en VB avec Dir(C:*.*). L'équivalent est
il possible sous SQL Server ? Le but étant de retourner tous les noms de
fichiers présents dans un répertoire dans une boucle.

D'avance merci

Laurent


EXEC master.dbo.xp_cmdshell 'DIR C:TEMP*.*'

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************


Avatar
Fred BROUARD
Un petit exemple :

-- obtenir la liste des fichiers d'un répertoire dans une table

CREATE TABLE #T_LIGNES
(L VARCHAR(296))

INSERT INTO #T_LIGNES
EXEC master..xp_cmdshell 'dir *.*'

DELETE FROM #T_LIGNES
WHERE SUBSTRING(L, 1, 1) = ' '
OR L IS NULL

CREATE TABLE T_FILES_FLS
(
FLS_ID INTEGER NOT NULL IDENTITY PRIMARY KEY,
FLS_NAME VARCHAR(256) NOT NULL,
FLS_DH DATETIME NOT NULL,
FLS_SIZE INTEGER,
FLS_DIR BIT NOT NULL DEFAULT 0
)

-- attention : dépend des paramètres régionaux
SET DATEFORMAT DMY

SELECT SUBSTRING(L, 18, 21) FROM #T_LIGNES

INSERT INTO T_FILES_FLS
SELECT SUBSTRING(L, 40, 256),
CAST(SUBSTRING(L, 1, 10) + ' ' + SUBSTRING(L, 13, 5) AS DATETIME),
CASE
WHEN SUBSTRING(L, 25, 5) = '<DIR>' THEN NULL
ELSE CAST(REPLACE(SUBSTRING(L, 18, 21), ' ', '') AS INTEGER)
END,
CASE
WHEN SUBSTRING(L, 25, 5) = '<DIR>' THEN 1
ELSE 0
END
FROM #T_LIGNES

DROP TABLE #T_LIGNES

SELECT *
FROM T_FILES_FLS
WHERE FLS_DIR = 0

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************


LM a écrit :
Merci pour cette information, cependant je connaissais cette proc stockée.
Le problème étant que je ne sais pas l'exploiter. Pouvez vous me dire
comment je peux récupérer séquentiellement les noms de fichiers listés dans
une variable ?
D'avance merci !
Laurent

"Fred BROUARD" a écrit dans le message de news:
eaK%
LM a écrit :
Bonsoir à tous,

J'aurais aimé savoir comment, depuis une procédure stockée en TSQL,
scruter un répertoire.
Pour exemple, cela est possible en VB avec Dir(C:*.*). L'équivalent est
il possible sous SQL Server ? Le but étant de retourner tous les noms de
fichiers présents dans un répertoire dans une boucle.

D'avance merci

Laurent


EXEC master.dbo.xp_cmdshell 'DIR C:TEMP*.*'

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************






Avatar
LM
Merci beaucoup pour cette aide !

Laurent

"Fred BROUARD" a écrit dans le message de news:

Un petit exemple :

-- obtenir la liste des fichiers d'un répertoire dans une table

CREATE TABLE #T_LIGNES
(L VARCHAR(296))

INSERT INTO #T_LIGNES
EXEC master..xp_cmdshell 'dir *.*'

DELETE FROM #T_LIGNES
WHERE SUBSTRING(L, 1, 1) = ' '
OR L IS NULL

CREATE TABLE T_FILES_FLS
(
FLS_ID INTEGER NOT NULL IDENTITY PRIMARY KEY,
FLS_NAME VARCHAR(256) NOT NULL,
FLS_DH DATETIME NOT NULL,
FLS_SIZE INTEGER,
FLS_DIR BIT NOT NULL DEFAULT 0
)

-- attention : dépend des paramètres régionaux
SET DATEFORMAT DMY

SELECT SUBSTRING(L, 18, 21) FROM #T_LIGNES

INSERT INTO T_FILES_FLS
SELECT SUBSTRING(L, 40, 256),
CAST(SUBSTRING(L, 1, 10) + ' ' + SUBSTRING(L, 13, 5) AS DATETIME),
CASE
WHEN SUBSTRING(L, 25, 5) = '<DIR>' THEN NULL
ELSE CAST(REPLACE(SUBSTRING(L, 18, 21), ' ', '') AS INTEGER)
END,
CASE
WHEN SUBSTRING(L, 25, 5) = '<DIR>' THEN 1
ELSE 0
END
FROM #T_LIGNES

DROP TABLE #T_LIGNES

SELECT *
FROM T_FILES_FLS
WHERE FLS_DIR = 0

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************


LM a écrit :
Merci pour cette information, cependant je connaissais cette proc
stockée.
Le problème étant que je ne sais pas l'exploiter. Pouvez vous me dire
comment je peux récupérer séquentiellement les noms de fichiers listés
dans une variable ?
D'avance merci !
Laurent

"Fred BROUARD" a écrit dans le message de
news: eaK%
LM a écrit :
Bonsoir à tous,

J'aurais aimé savoir comment, depuis une procédure stockée en TSQL,
scruter un répertoire.
Pour exemple, cela est possible en VB avec Dir(C:*.*). L'équivalent
est il possible sous SQL Server ? Le but étant de retourner tous les
noms de fichiers présents dans un répertoire dans une boucle.

D'avance merci

Laurent


EXEC master.dbo.xp_cmdshell 'DIR C:TEMP*.*'

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************