SSIS Expression通配符

时间:2016-12-07 15:02:51

标签: ssis ssis-2008

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

所以我想忽略传递日期的字符。我到目前为止的变量是

FeesEstimateRequestList

返回

  

\ 192.168.100.201 \˚F\备份\ 582499_backup_2016_12_07.bak

实际档案名称为582499_backup_2016_12_07_030001_7282785.bak

所以我需要忽略通过07的所有事情。但是我似乎无法让它发挥作用。我试过了

SQL Central

错误提供错误

  

[文件系统任务]错误:出现以下错误时发生错误   消息:“找不到文件   '\ 192.168.100.201 \˚F\备份\ 582499_backup_2016_12_07.bak'。“

1 个答案:

答案 0 :(得分:0)

我通常对我要处理/移动的不同位置/文件签名有不同的变量等。请尝试以下操作:

  1. 声明一个名为" filename"的变量类型字符串,分配任何值,因为它将在运行时动态更改。如果你把它留空,你的文件系统任务会抱怨它被用作源/目的地并且是空的(它不知道它将被动态分配)。
  2. 声明一个名为" sourceDir"的变量并指定" \\ 192.168.100.201 \ f \ Backups" (变量处理为您逃避的反斜杠)
  3. 声明一个名为" destDir"的变量并指定以反斜杠结尾的目标路径,例如" \\ 192.168.100.201 \ f \ Destination \"
  4. ForEach Loop Container,转到Collection>表达式
  5. 添加到表达式"目录"你的变量@ [User :: sourceDir]
  6. 添加到表达式" FileSpec"您的自定义表达式,但以" * .bak" 结尾(这将允许filespec选择忽略文件签名中当天任何内容的文件)

    "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. 在变量映射中,将变量" User :: filename" 添加到索引0

  8. 将文件系统任务添加到ForEachLoop容器
  9. 文件系统任务:将变量" User :: destDir" 提供为" DestinationVariable" ,将IsDestinationVariable设置为true。
  10. 文件系统任务:将变量" User :: filename" 提供为" SourceVariable" ,将IsSourcePathVariable设置为true。
  11. 将测试文件放在源目录中并以调试模式运行。
  12. 您还可以右键单击ForEachLoop容器并设置一些断点,以查看ForEachLoop枚举器集合中不同文件名的变量User :: filename更改值。
  13. 现在,您可以部署程序包并创建SQL Server代理作业,以便为程序包分配计划以运行和繁荣。您有一个完全自动化的备份。如果ForEachLoop容器找不到没有问题的文件,它将正常退出。