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
我正在使用 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