TSQL - 如何使用 xp_dirtree 从文件中读取日期时间

TSQL - how to read datetimes from files with xp_dirtree

我正在使用 TSQL 脚本,它使用 xp_dirtree 从目录中获取文件名使用多个 bak 文件,然后使用 selected 文件名和目录恢复到数据库。

但是,我希望能够 select 所述文件夹中的最新文件。目前,脚本仅在按文件名排序后选择顶部。

文件夹可能如下所示:

------------
File1.BAK

File2.BAK

File3.BAK

File4.BAK
------------

我的脚本目前看起来像这样:

        DECLARE @dir varchar(60)
        SET @dir = 'C:\TestFolder\'

        CREATE TABLE #DirectoryTree (
               id int IDENTITY(1,1)
              ,subdirectory nvarchar(512)
              ,depth int
              ,isfile bit);

        INSERT #DirectoryTree (subdirectory,depth,isfile)
        EXEC master.sys.xp_dirtree @dir,1,1;

        DECLARE @file varchar(60) = 
            (SELECT TOP 1 subdirectory
            FROM #DirectoryTree
            WHERE isfile = 1 AND RIGHT(subdirectory,4) = '.BAK'
            ORDER BY subdirectory DESC)

        SET @dir = @dir+@file
        PRINT '--Selected file: "'+@dir+'"'
        GO
        DROP TABLE #DirectoryTree

        --restores from file
        restore database TESTDB
        from disk = @dir
        with replace, file = 1

Dirtree 没有 return 该信息。 Xp_cmdshell 可以,并且必须在您的实例上启用它,您的 dba 可能允许也可能不允许。如果是这里是解决方案:

create table #files (name varchar(500))

insert into #files
EXEC xp_cmdshell 'dir *.exe';

    -- find name after list space in string....
select name, REVERSE(SUBSTRING(REVERSE(name),0,CHARINDEX(' ',REVERSE(name)))) 
from #files 
     -- dates start with numeric --check assumption carefully...
     where isnumeric(left(name,1))=1 
       --order by date desc       --
    order by CAST(left(name,17) as datetime) desc