T-SQL

Výpis adresářů z T-SQL

Pokud potřebujeme vypsat v T-SQL seznam adresářů, případně souborů na disku, máme tyto základní možnosti: extended proceduru xp_dirtree, DOS příkazy pomocí xp_cmdshell, CLR nebo OLE (OAAutomation objekty). Dnes se povídáme na možnosti, které nám poskytuje xp_dirtree a xp_cmdshell.

Především je nutné zmínit, že xp_dirtree je nedokumentovaná a nepodporovaná procedura a její použití může přinést později problémy v případě upgrade SQL Serveru na vyšší verzi.

xp_dirtree má tyto vstupní parametry:

  • Cesta na úložišti, kde chceme zahájit procházení případně vypsat obsah.
  • Hloubka, do které se mají složky procházet. Ve výchozím nastavení 0 – bez omezení.
  • Nastavení, zda zobrazovat pouze složky nebo i soubory. Ve výchozím nastavení 0 – nezobrazovat soubory.

Nyní praktický příklad: necháme si vypsat kompletní obsah adresáře “c:\Program Files\Microsoft SQL Server\120\SDK”. Chceme vidět všechny podložky do omezené hloubky a také nás zajímají soubory ve složkách. Výstup procedury uložíme do proměnné @DirList pro případné pozdější použití.

DECLARE @DirList TABLE ( DirName VARCHAR(128), Depth INT, IsFile BIT )

INSERT @DirList
 EXEC master..xp_dirtree 'c:\Program Files\Microsoft SQL Server0\SDK',0, 1
 
SELECT * FROM @DirList 
GO

xp_diftree_ListingFiles

xp_cmdshell

Druhou možnost nám přináší xp_cmdshell, která je na rozdíl od xp_dirtree plně dokumentovaná a podporovaná. Pomocí této procedury můžeme spouštět libovolný kód pro příkazovou řádku, což ovšem není jen výhoda, ale také značné bezpečností riziko. Právě z toho důvodu je procedura ve výchozím stavu zakázána a je potřeba ji povolit pomocí konfigurační procedury sp_configure:

EXEC [sys].[sp_configure] 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC [sys].[sp_configure] 'xp_cmdshell', 1
GO
RECONFIGURE
GO

Volání procedury je jednoduché a pro zobrazení obsahu adresáře použijeme běžné dosové příkazy:

EXEC master..xp_cmdshell 'DIR /b c:\Program Files\Microsoft SQL Server0\'
GO

Výstup z volání xp_cmdshell můžeme pochopitelně uložit pro pozdější zpracování obdobným způsobem jako v předchozím příkladu.

Leave a Reply

Your email address will not be published.