2017-03-06 29 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 
相關問題