sql - SSIS - 填充 OLE DB 目标表中未映射的列

标签 sql sql-server ssis etl dataflow

如下图所示,我在 SQL Server 中有一个表,我通过平面文件源填充该表。我想根据下面列出的逻辑更新目标表中的两列:

  • SessionID - 第一次 CSV 导入的所有行的值为 1;第二次导入的值为 2,依此类推。
  • TimeCreated - CSV 导入发生的日期时间值。

我不需要关于如何编写 TSQL 代码来完成此任务的帮助。相反,我希望有人建议一种方法来将其实现为 SSIS 中的数据流任务。

enter image description here

提前感谢您的想法。

编辑2012年11月29日

由于到目前为止所有答案都建议在 SQL Server 端处理这个问题,所以我想向您展示我最初尝试做的事情(见下图),但它不起作用。 SSIS 将数据插入目标表后,SQL Server 中未触发触发器。

如果你们中有人能解释为什么触发器没有触发,那就太好了。

enter image description here

最佳答案

如果您能够修改目标表,则可以使用 SessionID 和 TimeCreated 的默认值来完成所有工作。 SessionID 将是一个自动递增整数,而 TimeCreated 的默认值将是 getdate() 或 gettime(),具体取决于数据类型。

现在,如果您确实需要在工作流程中创建值,则可以为每个值使用变量。

SessionID 是一个由执行 SQL 任务设置的包变量。只需引用结果集中的变量,然后让 SQL 确定要使用的下一个数字。不过,这存在潜在的并发问题。

通过基于系统变量 StartTime 在数据流中创建派生列,可以轻松完成 TimeCreated。

关于sql - SSIS - 填充 OLE DB 目标表中未映射的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13616115/

相关文章:

html - 瑞典标志不适用于 SQL 查询

Mysql,如何一次性根据另一个查询的结果集进行选择

sql 2005 动态分组数据

sql - 在 SSIS 导入期间暂停表约束

ssis - 如何将连接字符串传递到 SSIS 文件中?

mysql - 如何在MySQL中进行分组排名

mysql - 从第一个单词中获取 3 个字母,从下一个单词中获取 3 个字母

sql-server - 返回表中不存在但在我的 IN 列表中存在的值?

sql - 我需要根据跨多个表的标准从数据库中选择信息

sql-server-2008 - 在SSIS OLEDB目标中更新行