【发布时间】: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 个包的项目。包装内含:
- 一个名为
EmployeeExport的Data Flow Task;此任务包含OLE DB Source和Flat 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
我尝试了许多不同的方法,当我提供日期时它可以工作,但是当我使用字符串时给出的日期为空白或使用日期时为默认时,我无法让它工作。
这是我一直在寻找的一些来源,以找出我的问题
- How to pass SSIS variables in ODBC SQLCommand expression?
- How do I pass system variable value to the SQL statement in Execute SQL task?
- http://mindmajix.com/ssis/how-to-execute-stored-procedure-in-ssis-execute-sql-task
.. 还有更多。
最后一次注意:这个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