【问题标题】:Checking files exists using wild card in SQL Server 2014在 SQL Server 2014 中使用通配符检查文件是否存在
【发布时间】:2016-11-16 16:37:25
【问题描述】:

我每天都会有 3 个文件进入我的 C: 驱动器,时间戳采用 YYMMDDhhmm 格式。例如。 TotalSale1611160037 表示2016-11-16 12:37 am

TotalSale1611160037 
RegionSale1611160037
Statesale1611160037

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

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

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

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

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

感谢您的宝贵时间和帮助

【问题讨论】:

  • 在 SQL 中有一些方法可以做到这一点,包括 xp_cmdshell,但这是一个安全问题。我建议你把它放在应用层,即使用.net或java,然后从应用层触发sql server SP,而不是在SQL Server中编码
  • 通常您会使用 SSIS 脚本任务和 System.IO.File.Exists() 函数和/或 system.io.directoryinfo.getfiles 并循环查看您想要的文件是否存在。

标签: sql-server ssis ssis-2012


【解决方案1】:

创建一个Execute 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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    相关资源
    最近更新 更多