在SQL Server 2014中使用通配符检查文件存在

时间:2016-11-16 16:37:26

标签: sql-server ssis ssis-2012

每天有3个文件进入我的C:驱动器,时间戳为YYMMDDhhmm格式。对于前TotalSale1611160037表示2016-11-16 12:37 am

TotalSale1611160037 
RegionSale1611160037
Statesale1611160037

我已在SQL Server Agent中安排了一个作业,将这3个文件加载到SQL Server 2014中。

我的要求是在开始加载作业之前,我需要检查C:驱动器上是否存在3个文件。仅当C:驱动器上存在3个文件时,作业才应运行。

如果C:驱动器上缺少任何这些文件,则不应运行加载作业并发送数据库电子邮件,显示缺少哪些文件。

文件的第一部分(TotalSaleRegionSaleStatesale)每天都相同;只有时间戳(1611160037)会改变。在加载过程之后,我会将这些文件移动到另一个文件夹中。

请帮帮我。我不知道如何使用SQL Server中的通配符检查文件是否存在。

感谢您的时间和帮助

1 个答案:

答案 0 :(得分: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