2017-03-06 63 views
0

我试图使用xp_cmdshell读取文件目录,然后将这些文件名称粘贴到日志表中。每次我阅读目录时,我只是想将新文件添加到日志表中。下面是我现在所拥有的,但它很混乱。读取文件目录并将文件输入到SQL表格日志中,但只输入新文件

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 
+0

代码查询我需要的数据,但没有将其插入到eod_log表中。 –

+0

@ FilePath2从不使用。 SELECT结果不被使用(为什么不直接将它们插入到表中)。 –

+0

对不起,应该是@filepath而不是filepath2。在此之前,我有一个过程来识别不在我目录中的EOD_log表中的任何东西。然后加载不在EOD_Log中的文件。在该文件已被加载后,我想要将该文件名添加到EOD_log中。这是程序的一部分。但我不能让它插入。你能帮我直接插入语句吗? –

回答

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问题,而不是具有可变当有在分配中,将简单地做无插无行是空的。为什么即使使用Top 1?我想你甚至不需要检查FileList列中的NULL。

+0

谢谢!我选择了第一个,因为我有一个BCP过程来导入我的日志中没有的数据,而我拥有的bcp脚本只允许一个文件名。我只有SQL的标准版本,所以我没有SSIS包的SQL管理。它的工作。 –

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