sql - SSIS:Excel 源代码 - 是否可以跟踪在 excel 中所做的更改?

标签 sql sql-server excel ssis etl

假设我在 excel 中有以下列:级别、组、代码、名称、日期、具有以下值的附加信息:
1,A,1234,约翰,2019-09-01,信息 1
1,A,1234,约翰,2019-09-01,信息 2

我目前有以下导入逻辑,如果数据库中没有特定代码和级别的记录,则插入新记录,如果数据库中已存在代码,则更新记录。但是由于 excel 中没有唯一标识符,因此很难更新正确的记录。在这种情况下,常用的方法是什么?

假设在上面的示例中,组或日期将更改为一条记录。如何实现更新数据库中正确记录的逻辑。

最佳答案

如果没有唯一的主键,您将无法拥有不同的数据集。如果没有这样的主键,您将无法只更新一行,而是更新一个或多个类似的行。在当前状态下,无法准确跟踪更改。

如果您确实有一个唯一的主键,最简单的解决方案是附加一个日期时间作为跟踪更改的一种方式,并在任何值更改时将其添加为新行。您的数据集如下所示:

1, A, 1234, John, 2019-09-01, Info1, DateCreated, DateChanged
1, A, 1234, John, 2019-09-01, Info2, DateCreated, DateChanged2
1, A, 1234, John, 2019-09-01, Info3, DateCreated, DateChanged3

重要的是要记住,这仅适用于静态主键,通常用于复合键的某些字段可能不起作用。用户可以更改他们的姓名或纠正错误输入的出生日期,这可能会更改某些复合键。

在 SSIS 中,这将使用两个查找任务来实现:
  • 在第一个查找任务中比较主键。如果主键不存在,请使用派生列任务将 DateCreated 和 DateModified 设置为 GETDATE()。
  • 如果主键确实存在,则运行第二个查找任务来比较记录中的所有行。如果它们都相同,则意味着记录没有更改,并且不需要将更新发送到数据库。
  • 如果存在差异,则使用派生列 SSIS 任务仅将 DateModified 列更新为 GETDATE() 并将其添加为新行。

  • 这三个分支选项应考虑每个潜在状态:新记录、没有更改的现有记录、有更改的现有记录

    关于sql - SSIS:Excel 源代码 - 是否可以跟踪在 excel 中所做的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58115654/

    相关文章:

    sql - 使用 SQL Server 查找表中的重复记录

    sql-server - Group by 子句适用于一种环境,但不适用于另一种环境

    c# - Worksheet.SaveAs ("file.csv") 在 .NET 3.5 和 .NET 4.0 中的工作方式不同

    python - 如何使 '?' 等于一个数字,所以当我浏览列表时。它将把它算作零。 (Python)

    excel - 将用户定义函数 (UDF) 添加到 Excel 中的内置类别

    php - 有没有更高效的更新数据库值的方法?

    mysql - 如何在magento中测试sql查询?

    mysql - DATETIME 与 LIKE 进行动态搜索 SQL

    sql-server - 笛卡尔积和交叉连接有什么区别?

    sql-server - SQL Server 导入表保持默认值