我寫了下面的存儲過程,列出在給定路徑中的文件:
ALTER procedure [dbo].[usp__ListFiles_xml] (
@path varchar(8000),
@xmldata xml output
)
as
begin
DECLARE @ProcName varchar(255) = OBJECT_NAME(@@PROCID);
declare @DirLines table (
RowNum int identity(1,1) not null,
line varchar(8000)
);
declare @DirCommand varchar(8000) = 'dir /A:-D /n "'[email protected]+'"';
insert into @DirLines
exec xp_cmdshell @DirCOmmand;
declare @DirName varchar(8000) = (select SUBSTRING(line, 15, 8000) from @DirLines where RowNum = 4);
delete from @DirLines
where line is null or isnumeric(LEFT(line, 2)) = 0;
set @xmldata = (
select substring(line, 40, 255) as FileName,
cast(replace(substring(line, 21, 18), ',', '') as bigint) as FileSize,
cast(left(line, 20) as DateTime) as CreationDateTime,
@DirName as DirName
from @DirLines
for xml raw('Dir'), type
)
return;
end; -- usp__ListFiles_xml
您可以選擇的結果到一個表,找到你需要的文件,然後繼續從那裏做你的負載:
declare @xmldata xml;
exec usp__ListFiles_xml @FileTemplate, @xmldata output;
declare @Files table (
FileName varchar(255),
FileSize bigint,
CreationDateTime DateTime,
DirName varchar(8000)
);
insert into @Files
select T.c.value('@FileName', 'varchar(255)') as FileName,
T.c.value('@FileSize', 'bigint') as FileSize,
T.c.value('@CreationDateTime', 'datetime') as CreationDateTime,
T.c.value('@DirName', 'varchar(8000)') as DirName
from @xmldata.nodes('Dir') as T(c);
我發現在移動中的錯誤。我在DOS中試過,發現你需要識別完整的文件名才能移動它。這給我留下了同樣的問題,如果我找不到文件名,那麼我不能導入,我不能移動。 – 2013-02-08 16:59:48