2017-03-06 8 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の問題を解決する必要があります。なぜトップ1を使うのか?そして、あなたはFileList列のNULLをチェックする必要さえないと思います。

+0

ありがとうございました!私は私のログにはないデータをインポートするBCPプロシージャがあり、私が持っているbcpスクリプトは1つのファイル名だけを許可するため、トップ1を選択します。私は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 
関連する問題