2016-12-07 124 views
1

我正在尝试创建文件系统任务以将一些备份文件从一台服务器复制到另一台服务器。我遇到的问题是结束字符串是时间戳,因此可以每天更改。SSIS表达式通配符

所以我想忽略通过日期的字符。变量i至今是

"\\\\192.168.100.201\\f\\Backups\\582499_backup_" 
+ (DT_STR,4,1252)DATEPART("yyyy" , getdate()) + "_" 
+ RIGHT("0" + (DT_STR,4,1252)DATEPART("mm" , getdate()), 2) 
+ "_" 
+ RIGHT("0" + (DT_STR,4,1252)DATEPART("dd" , getdate()), 2) 
+".bak" 

这将返回

\192.168.100.201\f\Backups\582499_backup_2016_12_07.bak

实际的文件是582499_backup_2016_12_07_030001_7282785.bak

所以我需要不顾一切通过了07.不过,我似乎无法名让它工作。我试过以下

SQL Central

它的错误给错误

[File System Task] Error: An error occurred with the following error message: "Could not find file '\192.168.100.201\f\Backups\582499_backup_2016_12_07.bak'.".

+0

我经常发现执行过程任务更有用。以下是使用执行过程使用widlcards移动一堆文件的示例:https://mitchellpearson.com/2015/06/05/move-files-in-ssis-using-execute-process-task/您可以复制通过使用COPY而不是移动。这是另一个示例:http://stackoverflow.com/questions/23158909/copying-all-files-in-ssis-without-foreach –

回答

0

我通常有我想要处理/移动等试试下面的不同位置/文件签名不同的变量:

  1. 声明一个名为“filename”的字符串类型变量,指定任何值,因为它在运行时会动态改变。如果将其保留为空,则文件系统任务将会抱怨它被用作源/目标并且是空的(它不知道它将被动态分配)。
  2. 声明一个名为“sourceDir”变量,并将“\\ 192.168.100.201 \˚F\备份\”(变量处理反斜杠你)
  3. 声明一个名为“DESTDIR”变量,并将您的目的地路径用反斜杠结束,像“\\ 192.168.100.201 \˚F\目标\”
  4. foreach循环容器,去收藏>表达式
  5. 添加到表达式“目录”您的变量@ [用户:: sourceDir ]
  6. 添加到表达式“FileSpec”您的自定义exp ression但与“名为* .bak”(这将允许该文件规范挑在文件签名忽略任何过去的一天中的文件)

    "582499_backup_" + (DT_STR,4,1252)DATEPART("yyyy", getdate()) + "_" + RIGHT("0 (DT_STR,4,1252)DATEPART("mm" , getdate()), 2) + "_" + RIGHT("0 (DT_STR,4,1252)DATEPART("dd" , getdate()), 2) +".bak" 
    
  7. 在变量映射,添加变量“用户结尾: :文件名”指数0

  8. 加入你的文件系统任务的foreach循环容器
  9. 文件系统任务:为您的变量‘用户:: DESTDIR’“DestinationVariable”,将IsDestinationVariable设置为true。
  10. 文件系统任务:提供变量“User :: filename” as “SourceVariable”,将IsSourcePathVariable设置为true。
  11. 将测试文件放在源目录中并在调试模式下运行。
  12. 您还可以右键单击ForEachLoop容器并设置一些断点以查看ForEachLoop枚举器集合中不同文件名的变量User :: filename更改值。
  13. 现在您可以部署您的软件包并创建一个SQL Server代理作业,为您的软件包指定运行和繁荣时间表。你有一个完全自动化的备份。如果ForEachLoop容器找不到移动没有问题的文件,它将优雅地退出。