SSIS用户定义的日期或默认

时间:2017-03-16 18:56:02

标签: sql-server ssis

我对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个包的项目。该软件包包含:

  • 名为Data Flow Task的{​​{1}};此任务包含EmployeeExportOLE DB Source
  • 一个名为Filename_Export的包级参数(这样可以在用户运行文件路径时更改该文件路径;该参数在每天运行它的作业中配置了一个默认值

所有这一切都完美无缺。

问题

我还设置了另一个名为Flat File Destination的包级别参数。目的是让谁/什么运行包来定义日期。但是,如果日期为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表中。

谢谢。

1 个答案:

答案 0 :(得分:2)

使用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,然后运行包,从watch window标签打开Debug,拖动并将变量放入监视窗口,您应该看到值。