Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Server 2014中使用通配符检查文件是否存在_Sql Server_Ssis_Ssis 2012 - Fatal编程技术网

Sql server 在SQL Server 2014中使用通配符检查文件是否存在

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个文件时,作业才应运

我将每天有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,并循环查看所需文件是否存在。