It is possible to get the content of a directory from T-SQL with the Extended Stored Procedure (XP) master.dbo.xp_dirtree. This only requires the SQL Server service account to have access to the directory and have browse rights.
Syntax:
EXECUTE master.dbo.xp_dirtree <Directory>, <Depth>, <IsFile>
- <Directory>nvarchar(???): Full path (name) of directory. Can be UNC path. The value can end with '\' or not.
- <Depth>int: Depth of list in directory.
- <IsFile>int: Show if row is on a file. If the value in non-zero then the result will show if a row is in a file.
The result is a table with the three columns subdirectory, depth and file where
- subdirectoryis the name of the subdirectory or file in the given directory.
- depthis the depth of the directory/file in the given directory. One ('1') is the root of the current directory.
- fileindicates if the directory is a file ('1') or not ('0'). If not a file then it is a directory.
  For some reason the value for <Directory> can't be from SERVERPROPERTY like
  EXECUTE master.dbo.xp_dirtree SERVERPROPERTY('InstanceDefaultBackupPath'), 1,1;.
  The error is
  Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'InstanceDefaultBackupPath'.
  Not even with CONVERT like
  EXECUTE master.dbo.xp_dirtree CONVERT(nvarchar(512), SERVERPROPERTY('InstanceDefaultBackupPath')), 1,1;
  where the error is
  Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'CONVERT'.
  The system function SERVERPROPERTY can be used through a temporary variable like this
  DECLARE @_backuppath nvarchar(512) = CONVERT(nvarchar(512), SERVERPROPERTY('InstanceDefaultBackupPath'));
EXECUTE master.dbo.xp_dirtree @_backuppath, 1,1;
Example:
  EXECUTE master.dbo.xp_dirtree N'D:\MSSQL\Backup', 1, 1;
  List (backup) files in folder.
Unfortunately this Extended Stored Procedure is not documentd by Microsoft. Like many other XP's...
History
  2024-06-25: Examples on SERVERPROPERTY added.
  2022-03-25: Post published.
 
 
 Posts
Posts
 
 
No comments:
Post a Comment