如下图所示,我在 SQL Server 中有一个表,我通过平面文件源填充该表。我想根据下面列出的逻辑更新目标表中的两列:
- SessionID - 第一次 CSV 导入的所有行的值为 1;第二次导入的值为 2,依此类推。
- TimeCreated - CSV 导入发生的日期时间值。
我不需要关于如何编写 TSQL 代码来完成此任务的帮助。相反,我希望有人建议一种方法来将其实现为 SSIS 中的数据流任务。
提前感谢您的想法。
编辑2012年11月29日
由于到目前为止所有答案都建议在 SQL Server 端处理这个问题,所以我想向您展示我最初尝试做的事情(见下图),但它不起作用。 SSIS 将数据插入目标表后,SQL Server 中未触发触发器。
如果你们中有人能解释为什么触发器没有触发,那就太好了。
最佳答案
如果您能够修改目标表,则可以使用 SessionID 和 TimeCreated 的默认值来完成所有工作。 SessionID 将是一个自动递增整数,而 TimeCreated 的默认值将是 getdate() 或 gettime(),具体取决于数据类型。
现在,如果您确实需要在工作流程中创建值,则可以为每个值使用变量。
SessionID 是一个由执行 SQL 任务设置的包变量。只需引用结果集中的变量,然后让 SQL 确定要使用的下一个数字。不过,这存在潜在的并发问题。
通过基于系统变量 StartTime 在数据流中创建派生列,可以轻松完成 TimeCreated。
关于sql - SSIS - 填充 OLE DB 目标表中未映射的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13616115/