Esta procedure possui 3 parâmetros:
- Directory - este parâmetro indica o diretório cujo conteúdo você deseja listar
- Depth - este parâmetro indica quantos níveis de subpasta você deseja listar. 0 irá listar todas as subpastas.
- 0 - lista todas as subpastas
- 1 - lista somente a pasta indicada no parâmetro directory
- 2- lista a pasta indicada no parâmetro directory + uma subpasta
- ... e assim por diante
- File - indica o que você deseja listas no seu diretório:
- 0 - somente pastas
- 1 - pastas e arquivos
Esta procedure retorna 3 colunas
- Name - nome do arquivo ou pasta
- Depth - indica o nível em que o arquivo/pasta está (1 - está na pasta, 2 - está na subpasta, etc)
- IsFile - 0 indica que é uma pasta e 1 indica que é um arquivo.
==================================================
Exemplo:
===================================================
Tenho a seguinte estrutura:
- C:\Pasta1
- Arquivo1.txt
- Arquivo11.txt
- Pasta2
- Arquivo2.txt
- Arquivo22.txt
- Pasta3
- Arquivo3.txt
- Arquivo33.txt
O comando abaio irá listar todos os arquivos e pastas, mas somente no primeiro nível, ou seja, somente o conteúdo do diretório C:\Pasta. Não irá listar o conteúdo das sub-pastas.
--------------------------
CREATE TABLE #FileList(Name varchar(200), depth numeric, IsFile numeric)
INSERT INTO #FileList exec master.dbo.xp_dirtree 'C:\Pasta1', 1, 1
select * from #filelist
drop table #filelist
---------------------------
O comando abaixo irá listar o conteúdo da Pasta1 e o conteúdo da pasta2 (segundo nível)
exec master.dbo.xp_dirtree 'C:\Pasta1', 2, 1
O comando abaixo irá listar o conteúdo da Pasta1 , pasta2 (segundo nível) e pasta 3 (terceiro nível)
exec master.dbo.xp_dirtree 'C:\Pasta1', 3, 1
Caso você execute desta forma, a procedure irá retornar apenas as coluna Name e Depth, pois, uma vez que você não está listando arquivos, você não precisa da coluna IsFile.
exe master.dbo.xp_dirtree 'C:\Pasta1', 1, 0
ou
exe master.dbo.xp_dirtree 'C:\Pasta1', 1