2016-11-16 5 views
-1

YYMMDDhhmm形式のC:ドライブに3つのファイルがタイムスタンプ付きで入力されます。例えば、 TotalSale1611160037は、私が2014年SQL Serverでワイルドカードを使用してファイルが存在していることを確認します。2014

私の要件は、読み込みジョブを開始する前に、私は3かどうかを確認する必要があるということであるSQL Serverにこれらの3つのファイルをロードするために、SQL Serverエージェントジョブをスケジュールしている2016-11-16 12:37 am

TotalSale1611160037 
RegionSale1611160037 
Statesale1611160037 

を意味し、ファイルはC:ドライブにあります。ジョブは、3つのファイルがC:ドライブに存在する場合にのみ実行する必要があります。

C:ドライブにこれらのファイルがない場合、ロードジョブは実行されず、欠落しているファイルを示すデータベース電子メールが送信されます。

ファイルの最初の部分(TotalSaleRegionSaleStatesale)は毎日同じです。タイムスタンプ(1611160037)のみが変更されます。ロードプロセスの後、私はそれらのファイルを別のフォルダに移動します。

私を助けてください。 SQL Serverでワイルドカード文字を使用しているファイルをチェックする方法がわかりません。

はお時間をいただき、ありがとうございますと

+0

を使用するのに役立ちますセキュリティの問題。私はこれをアプリケーション層に置くことをお勧めします。それは.netまたはjavaを使用して、SQL Serverでこれをすべてコーディングするのではなく、アプリケーション層からSQL Server SPをトリガーします。 – Surendra

+0

[ファイルが存在するかどうかを確認するか、 ?](http://stackoverflow.com/questions/11740000/check-for-file-exists-or-not-in-sql-server) – Doliveras

+0

通常、SSISスクリプトタスクとSystem.IO.File.Existsを使用します()関数および/またはsystem.io.directoryinfo.getfilesを実行し、必要なファイルが存在するかどうかを調べるためにループスルーします。 – Matt

答えて

0

は、SQL実行タスクを作成し、そこにSQLでこれを行う方法は、xp_cmdshellをを含んでいること、ですが、それは、次のT-SQL

Declare @AllFilesExist INT = 0 
     ,@BasePath VARCHAR(100) = 'D:\backups' 

Declare @Files TABLE ([FileName] VARCHAR(100), Depth INT, [File] INT) 

INSERT INTO @Files 
EXEC master.sys.xp_dirtree @BasePath,1,1; 


Select TOP 1 @AllFilesExist = 1 
FROM @Files 
WHERE EXISTS (SELECT 1 
       FROM @Files 
       WHERE [FileName] LIKE '%TotalSale%') 
AND EXISTS ( SELECT 1 
       FROM @Files 
       WHERE [FileName] LIKE '%RegionSale%') 
AND EXISTS ( SELECT 1 
       FROM @Files 
       WHERE [FileName] LIKE '%Statesale%') 

-- Now use @AllFilesExist Variable to decide the execution flow in your SSIS package 
関連する問題