我有一个输出csv文件的SSIS包。平面文件连接管理器在处理任务时使用带有变量的连接字符串表达式来构造文件名,它们都以日期和时间结束而变成一个由下划线分隔的无间断的字符串;例如,
\\server1\departments\Management Information\GDPR\Watch Folder Files\Marketing_Consent_20180726_1400.csv
我用来从日期捕获时间并将其转换为字符串的变量表达式如下;
SUBSTRING((DT_WSTR, 25) (DT_DATE) GETDATE(), 12, 2 ) +
SUBSTRING((DT_WSTR, 25) (DT_DATE) GETDATE(), 15, 2 )
此方法的缺陷在于它使用的是GETDATE()。当进程运行时,如果时间在创建文件后的一分钟内滴答作响,则稍后假定要移动文件的文件系统任务将不会执行此操作,因为当文件移动时,它正在寻找以1401.csv结尾的文件。创建的实际文件以1400.csv结尾。
我可以在程序包开始时捕获时间,然后将其存储并在整个程序包中使用相同的时间戳,而不是通过调用GETDATE()函数不断刷新它吗?
答案 0 :(得分:2)
是的,在程序包开始时,请使用脚本任务或Execute SQL任务将GETDATE()的值存储在程序包变量中。