2016-11-16 37 views
-1

我每天會有3個文件進入我的C:驅動器,其時間戳格式爲YYMMDDhhmm。爲前。 TotalSale1611160037意味着2016-11-16 12:37 am使用SQL Server 2014中的通配符檢查文件

TotalSale1611160037 
RegionSale1611160037 
Statesale1611160037 

我已經安排在SQL Server代理作業以這3個文件加載到SQL Server 2014

我的要求是,在開始裝載作業之前,我需要檢查,如果3文件存在於C:驅動器上。只有在C:驅動器上存在3個文件時,該作業才能運行。

如果C:驅動器上缺少這些文件中的任何一個,則加載作業不應運行併發送數據庫電子郵件,以顯示缺少哪些文件。

文件的第一部分(TotalSale,RegionSale,Statesale)每天都是相同的;只有時間戳(1611160037)會更改。加載過程後,我將把這些文件移動到另一個文件夾中。

請幫幫我。我不知道如何在SQL Server中使用通配符來檢查文件是否存在。

謝謝您的時間,並幫助

+0

有辦法在SQL中,包括xp_cmdshell的做到這一點,但它是一個安全問題。我建議你把它放在應用程序層,即使用.net或java,然後從應用程序層觸發sql server SP,而不是在SQL Server中編寫所有這些文件。 – Surendra

+0

[檢查文件是否存在或不存在於sql server中?](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任務,並使用以下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