【问题标题】:SSIS User Defined Date or DefaultSSIS 用户定义日期或默认值
【发布时间】:2017-03-16 18:56:02
【问题描述】:

我对 SSIS 还很陌生,不知道它的所有功能以及我可以使用哪些任务来做我想做的事情。我发现很多 Google 和 stackoverflow.com 搜索可以帮助我了解变量和参数以及如何设置它们等。

BLUF(底线在前面)

我有一个view,其中包含我想通过运行包的作业导出到文件的数据。

数据将被它的LastUpdatedDate 字段过滤,数据类型为DateTimeOffSet(7)。该包应允许用户使用指定的 dat 运行它或使用另一个表中的值 (SSISJobRun)。

结构

/*Employee Table*/
Id int
Name varchar(255)
LastUpdatedDate datetimeoffset(7)

/*SSISJobRun Table*/
Id int
JobTypeId int
RunDate datetimeoffset(7)

我做了什么

目前,我正在使用 SSDT for VS 2015 创建我的 SSIS 包并将它们部署到我的 SSIS 目录。

我有一个包含 1 个包的项目。包装内含:

  • 一个名为EmployeeExportData Flow Task;此任务包含 OLE DB SourceFlat File Destination
  • 一个名为 Filename_Export 的包级别参数(这样可以在用户运行文件时更改文件路径;该参数在每天运行的 Job 中配置了一个默认值

这一切运行良好。

问题

我还设置了另一个名为LastUpdatedDate 的包级别参数。目的是让谁/谁运行包来定义日期。但是,如果日期是null(如果我决定使用string)或者如果日期是默认值1899-12-30 00:00:00(如果我决定使用date),我想确定什么日期使用。

具体来说,如果用户没有提供真实的日期,那么我希望日期是最新的RunDate。对于这种情况,我使用以下代码:

SELECT TOP 1 LastUpdatedDate 
FROM SSISJobRun 
WHERE JobTypeId = 1 
ORDER BY LastUpdatedDate DESC

我尝试了许多不同的方法,当我提供日期时它可以工作,但是当我使用字符串时给出的日期为空白或使用日期时为默认时,我无法让它工作。

这是我一直在寻找的一些来源,以找出我的问题

.. 还有更多。

最后一次注意:这个date 将用于运行两个任务,所以如果有办法让它保持全局状态那就太好了。

最后,我需要打包在SSISJobRun 表中插入一行指定任务运行时间的行。

谢谢。

【问题讨论】:

  • 您可以在 SQL 中执行此操作,但您可能希望在 SSIS 中执行此操作。所以使用 Expression Task 预先计算出日期值应该是什么msdn.microsoft.com/en-us/library/hh213137.aspx
  • @Nick.McDermaid,我喜欢这个主意。我可以在流程中的某个时间点使用它,就像在我建议 LONG stackoverflow.com/a/42843296/286618 之后
  • @Nick.McDermaid 请将此添加为答案,以便我可以接受它以及 LONG 的答案,因为两者都帮助了我!
  • 很高兴我能帮上忙。如果我能彻底解释它,我只会添加一个答案。我现在没有时间

标签: sql-server ssis


【解决方案1】:

使用Execute SQL Task,粘贴

SELECT TOP 1 LastUpdatedDate 
FROM SSISJobRun 
WHERE JobTypeId = 1 
ORDER BY LastUpdatedDate DESC

在语句中,并将结果设置为single row,在Result页面中,选择您设置的变量,并将index更改为0

在同一个任务在同一次执行中第二次运行(在任何 foreach 或 for 循环中)之前并且在包中的任何地方都没有使用之前,此变量将保持相同的值。

如果你需要检查,右键单击Execute SQL taskEdit Breakpointspost execution,然后运行包,从Debug选项卡打开watch window,将变量拖放到观察窗口,你应该查看价值。

【讨论】:

  • 谢谢。我目前正在处理它,当结果为空时会出现错误,这将在每个包的第一次运行时发生。我会在等待您添加的同时寻找解决方案。谢谢。
  • 我发现我可以将从 到下一个流对象的路径设置为Completion vs Success。这允许一个空的结果集允许浮动继续到@Nick.McDermaid 建议的Expression Task。这两个答案都帮助我弄清楚了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
相关资源
最近更新 更多