【发布时间】:2012-04-10 19:15:16
【问题描述】:
我们收到来自客户的数据馈送,并且每次都获得大致相同的架构,尽管在客户端使用 3 方应用程序时它可能会发生变化。当我们收到数据文件时,我们将数据导入一个暂存数据库,其中每个数据文件(学生、出勤等)都有一个表格。然后,我们希望将该数据与我们已经存在于该客户数据库中的数据进行比较,并查看上次运行中哪些数据已更改(列已更改或整行可能已删除)。然后,我们希望将更新的值或删除的行写入审计表,这样我们就可以返回查看从之前的数据导入中更改了哪些数据。我们不想更新数据本身,我们只想记录两个数据集之间的不同之处。然后,我们将从客户数据库中删除所有数据,并从新数据文件中完全导入数据而不更改(此指令已下达,无法更改)。最大的问题是我需要动态地执行此操作,因为我不确切知道我将从我们的客户那里获得什么模式,因为他们可以对他们的表进行自定义。我需要能够动态确定目标中有哪些表及其结构,然后查看源并比较值以查看数据中发生了什么变化。
附加信息: 源中没有 ID 列,但有几列可用作构成不同行的代理键。
我希望能够为每个表通用地执行此操作,而不必在其中硬编码值,尽管我可能必须为单独的引用表中的每个表的代理键执行此操作。
我可以使用 SSIS、SP、触发器等,无论哪个更有意义。我已经查看了所有内容,包括 tablediff,但似乎没有一个拥有我需要的一切,或者一旦我进入它们,逻辑就会变得非常复杂。
当然,任何人已经做过类似的事情的任何具体例子都将不胜感激。
如果还有其他有用的信息,请告诉我。
谢谢
【问题讨论】:
-
请包括表/文件结构。
-
@Maess - 你读过这个问题吗?表格发生变化。
-
您的所有客户都向您发送文件。您获得的这些文件有一组通用的列,但客户可以添加自己的自定义列。您是否关心这些自定义列中的数据?因为您正在谈论动态更新每个文件的永久表架构,假设您想要保留自定义数据。
-
我们可能会在未来的某个时间关心数据,但我们不一定知道我们得到数据时的数据是什么。是的,我每次获得新数据时都会更新架构,因此我会保留他们发送给我的任何新数据点。
标签: sql sql-server tsql ssis