【问题标题】:How can I make sysdate variable in VS 2019 SSIS如何在 VS 2019 SSIS 中创建 sysdate 变量
【发布时间】:2021-05-24 22:02:56
【问题描述】:

我想在 SSIS 中创建一个作为当前日期的变量,以便我可以在脚本任务中引用它,但我只能使用开始日期和创建日期而不是 sysdate 来执行此操作。有人可以帮忙吗?

【问题讨论】:

  • 你能澄清sysdate的意思吗?
  • 我想要当前日期或当前日期和时间。甚至它的格式并不重要
  • 而一个包的开始时间没有给出你想要的结果?
  • 不,它给了我昨天打开包裹的日期。我知道我可以关闭它并重新打开,但我不希望在 SSMS 中部署它时出现此问题

标签: vb.net visual-studio variables ssis


【解决方案1】:

SSIS 有两种状态:设计时和运行时。设计时是 Visual Studio/BIDS/SSDT 中的体验。屏幕上有工件,交互式窗口,我们的变量窗口显示“静止”包的值。

运行时是调试器中的体验(或无人参与的执行)。在调试器中,它看起来像运行时 - 您看到对象,数据流组件亮起,您可以看到组件之间的数据流动,但您可以发现两者之间的差异。例如,“变量”窗口不会显示变量的值是“现在”。相反,它将显示设计时值。如果你想看看内部现在是什么样子,那就是 Debug 菜单,Locals 窗口。在那里你会看到所有在设计时定义的变量的当前值。

System::StartTime 具有在包开始时设置的运行时值(OnPackageStart 事件)。对于一个包的运行来说,包启动的时间是恒定的,无论包运行是持续一分钟还是3天,开始时间就是包启动的时间。设计时值永远不会传递给该变量的使用者,因为该值是在包启动时更新的。 SSIS 不会使用先前运行的值更新设计时值。即设计时开始时间 2021-02-18 将始终是静止值,尽管每天都在运行

您无法控制这种行为,也不必担心它永远不会准确,因为它是运行时工作方式的一部分。

存在一个表达式,GetDate(),每次检查时都会对其进行评估(设计和运行时)。我通常建议不要这样做,因为我可能会使用当前时间来关联数据库活动。

例如我在 2021-02-22T11:16:32.123 创建了这 10、100 或 1000000 条记录。如果我分十个批次插入,第一个场景将记录在相同的时间戳下。第二个看起来像 2021-02-22T11:16:32.123 的前 10 个,2021-02-22T11:16:32.993 的下一个 10,2021-02-22T11:16:33.223 的下一个 10 等等。也许更多,也许更少。为什么重要的是我无法向业务证明“这些 10/100/1000000 是来自加载 X 的行,因为它们都具有相同的时间戳”相反,我需要找到 2021-02-22T11:16 中的所有行:32.123 到 2021-02-22T11:16:38.532 哎呀,在那个时间范围内还运行了一个不同的进程,所以我的范围查询现在可以识别 (10/105/1000003) 行。

GetDate 对于之前开始但接近午夜边界的较长运行流程可能会导致对业务的解释令人沮丧。

最后,由于您引用的是脚本任务,因此您已经在 .NET 空间中,因此您可以在方法中使用 Now/Today 而不必担心将 SSIS 变量传递到环境中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多