读取文件目录并输入文件到SQL表日志,但只输入新文件

时间:2017-03-06 00:14:58

标签: sql sql-server variables

我尝试使用xp_cmdshell读取文件目录,然后将这些文件名粘贴到日志表中。每次我读取目录时,我只想将新文件添加到日志表中。以下是我现在所拥有的,但它很乱。

Declare @FileName Table(FileList Varchar(255))
Insert Into @FileName  
EXEC XP_CMDSHELL 'dir "C:\Data Log\EODFiles\*.CSV" /b'
Declare @FilePath Varchar(255)
Select Top 1 FilePath= FileList 
FROM [dbo].[EOD_Log] 
right join  @FileName 
on filelist = File_log
where filelist is NOT NULL  and File_log is NULL 
Insert Into  [dbo].[EOD_Log] (File_log)
select @filepath from @FileName where @filepath is not NULL 

2 个答案:

答案 0 :(得分:0)

我得到了它的工作,但它仍然很混乱。

DECLARE @FileName Table(FileList Varchar(255))
INSERT INTO @FileName  
EXEC XP_CMDSHELL 'dir "C:\Data Log\EODFiles\*.CSV" /b'
DECLARE @FilePath Varchar(255)
SELECT Top 1 @FilePath= FileList From @FileName 
WHERE FileList is Not Null and Filelist NOT IN (select * FROM [dbo].[EOD_Log])  
ORDER BY filelist desc
INSERT INTO  [dbo].[EOD_Log] (filename)
VALUES (@filepath)
DELETE from [dbo].[EOD_Log]
WHERE filename IS NULL 

答案 1 :(得分:0)

DECLARE @FileName Table(FileList Varchar(255))

INSERT INTO @FileName  
EXEC XP_CMDSHELL 'dir "C:\Data Log\EODFiles\*.CSV" /b'

INSERT INTO  [dbo].[EOD_Log] (filename)
SELECT FileList From @FileName 
WHERE Filelist NOT IN (select * FROM [dbo].[EOD_Log])  
ORDER BY filelist desc

这应解决你的NULL问题,而不是在一个赋值中没有行的情况下将变量留空,它将不会执行任何INSERT。为什么甚至使用Top 1?而且我认为您甚至不需要在FileList列中检查NULL。