每天有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:
驱动器上缺少任何这些文件,则不应运行加载作业并发送数据库电子邮件,显示缺少哪些文件。
文件的第一部分(TotalSale
,RegionSale
,Statesale
)每天都相同;只有时间戳(1611160037
)会改变。在加载过程之后,我会将这些文件移动到另一个文件夹中。
请帮帮我。我不知道如何使用SQL Server中的通配符检查文件是否存在。
感谢您的时间和帮助
答案 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