正如您在下图中看到的,我在SQL Server中有一个表,我通过平面文件源填充。目标表中有两列我想根据下面列出的逻辑更新:
我不需要帮助如何编写TSQL代码来完成这项工作。相反,我希望有人建议在SSIS中将其实现为数据流任务的方法。
提前感谢您的想法。
编辑11/29/2012
由于到目前为止所有答案都建议在SQL Server端处理这个问题,我想向您展示我最初尝试做的事情(见下图),但它没有用。 SSIS将数据插入目标表后,触发器未在SQL Server中触发。
如果你们中的任何一个人能够解释为什么触发器没有触发,那就太棒了。
答案 0 :(得分:5)
如果您能够修改目标表,则可以使SessionID和TimeCreated的默认值为您完成所有工作。 SessionID将是一个自动增量整数,而TimeCreated的默认值将是getdate()或gettime(),具体取决于数据类型。
现在,如果您确实需要将值作为工作流程的一部分创建,则可以为每个值使用变量。
SessionID是一个包变量,由执行SQL任务设置。只需引用结果集中的变量,让SQL确定要使用的下一个数字。但是,这有可能出现并发问题。
通过基于系统变量StartTime在数据流中创建派生列,可以轻松完成TimeCreated。
答案 1 :(得分:2)
您可以使用派生列填充TimeCreated
列,如果您希望数据流的时间发生,您只需使用日期和时间函数来获取当前日期时间。如果您想要整个包(所有文件)的公共时间戳,您可以使用系统变量@[System::StartTime]
(或称之为)。
对于CSV循环(我猜),您使用foreach循环容器,并将迭代值映射到您在SessionID
的派生列中映射的用户变量,如上所述。
答案 2 :(得分:0)
首先,我最好在SQL Server端做这个:) 但如果您不想或不想在服务器端执行此操作,则可以使用此方法:
很明显,你需要在某个地方存储SessionID,你可以为SQL Server中的那个或更好的某些设置表创建一个txt文件,或者可以有其他方法。
要将列SessionID
和TimeCreated
添加到OLE目标,您可以使用Derived columns