2

您是否曾在 SSIS 2008 中遇到过奇怪的行为,即平面文件连接管理器上的 DelayValidation 随机无法正常工作?


这是我在 SSIS 2008(非 R2)上苦苦挣扎的场景:

  • 我的包包括将 30 个不同的 *.CSV 平面文件导入数据库

  • CSV 文件每天传送到一个动态创建的文件夹 (D:\DataDelivery\DeliveryID_<GeneratedDeliveryID>)
    (例如 "D:\DataDelivery\DeliveryID_73\", "D:\DataDelivery\DeliveryID_74\", ..)
    ==>从这里通过 SSIS 导入 CSV 文件

  • 当前导入的传递 ID 将由 SSIS 包开头的存储过程确定(存储在 SSIS 变量“iDeliveryID”中)

  • 根据确定的交付 ID,我们使用名为“sImportPath”的变量和表达式 (EvaluateAsExpression=True) 构建完整的导入路径:
    “D:\DataDelivery\DeliveryID_”+ (DT_WSTR, 1252)@[User::iDeliveryID] + "\"

..

  • 然后将生成的导入路径用于每个平面文件连接管理器的 Connection 属性的表达式中,例如:

    • @[User::sImportPath] + "fileA.csv"
      (连接管理器 A 中连接属性的表达式)
    • @[User::sImportPath] + "fileB.csv"
      (连接管理器 B 中连接属性的表达式)
    • @[User::sImportPath] + "fileC.csv"
      (连接管理器 C 中连接属性的表达式)
  • 每个 Connection Manager 的 DelayValidation 属性都设置为 true !!!

  • 因此对于交付 ID 73,平面文件连接管理器的连接属性
    应在运行时解析为:
    D:\DataDelivery\DeliveryID_73\fileA.csv
    D:\DataDelivery\DeliveryID_73\fileB.csv
    D:\DataDelivery\DeliveryID_73\fileC.csv

但这就是现在现实中发生的事情:

  • 在 Visual Studio 中运行时,一切都按预期运行
  • 通过 SQL Server 代理在生产环境中运行时,会发生以下情况:
    • 有时包运行良好(所有文件导入)
    • 有时 fileA 被正确导入,而在同一进程中 fileB 停止并显示消息“无法打开数据文件 D:\DataDelivery\DeliveryID_0\fileB.csv”
      (在执行前阶段出错)
      =>您在这里看到交付 ID 为 0 = > 显然表达式没有解析
    • 有时 fileB 或 fileC 被正确导入,而在同一进程中 fileA 停止并显示消息“无法打开数据文件 D:\DataDelivery\DeliveryID_0\fileA.csv”
      (执行前阶段出错)=> 因为您看到相同的错误

==>在所有情况下,生成的路径(变量sImportPath)都能正确解析(我正在记录这个)
==>但似乎DelayValidation对某些连接管理器随机工作,而对其他连接管理器不起作用== > 我还尝试为整个包以及所有单个任务和容器设置 DelayValidation=true .. 仍然是相同的行为 你有没有经历过这样的行为?如果是,那么你是如何处理这个问题的?

非常感谢您的任何建议。
延斯

4

0 回答 0