Sql server 在SQL Server 2014中使用通配符检查文件是否存在
我将每天有3个文件进入我的Sql server 在SQL Server 2014中使用通配符检查文件是否存在,sql-server,ssis,ssis-2012,Sql Server,Ssis,Ssis 2012,我将每天有3个文件进入我的C:驱动器,时间戳为YYMMDDhhmm格式。例如,TotalSale116037指2016-11-16 12:37 am TotalSale1611160037 RegionSale1611160037 Statesale1611160037 我已在SQL Server Agent中安排了一项作业,将这3个文件加载到SQL Server 2014中 我的要求是,在开始加载作业之前,我需要检查C:驱动器上是否存在这3个文件。仅当C:驱动器上存在3个文件时,作业才应运
C:
驱动器,时间戳为YYMMDDhhmm
格式。例如,TotalSale116037
指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中的通配符检查文件是否存在
感谢您的时间和帮助创建执行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
在SQL中有很多方法可以做到这一点,包括xp_cmdshell,但这是一个安全问题。我建议您将其放在应用程序层,即使用.net或java,然后从应用程序层触发sql server SP,而不是在sql server中对所有这些进行编码。通常,您可能会使用SSIS脚本任务和System.IO.File.Exists()函数和/或system.io.directoryinfo.getfiles,并循环查看所需文件是否存在。