【发布时间】:2010-12-04 13:58:41
【问题描述】:
我有A表,这个表没有任何PK,它只是存储了很多行,这些行只能通过其列值的组合来识别。
有一个程序从表 A 和其他表中获取数据,进行适当的匹配/处理并为表 B 提供数据。
现在,如何检查表 A 中的数据是否正确插入到表 B 中?
它是 sql server 2000,所以 EXCEPT 不是解决方案。
也许一些程序包括:
- 光标将从 表A,
- 在 B 上进行选择(使用适当的 列匹配)
- 然后如果匹配的行已经 找到(选择返回一些数据) 增加计数器(适当的数量 传播的行)
- 如果没有找到匹配的行放 我们正在寻找的数据 临时表(供以后查看)
更新: 为表 B 提供数据的过程不会将表 A 中的所有行都放入表 C 中。此外,它还从其他表(我们称之为 C)中获取数据并将其放入 B 中(但也不是所有行)。我认为也许使用一个游标检查 B 以获取来自 A 的数据,然后使用另一个游标检查 B 以获取来自 C 的数据将是一个很好的解决方案。
【问题讨论】:
-
更新后:虽然我不排除在某些情况下需要使用游标,但这些情况很少见,这肯定不是其中之一。必须有一些标准可以让您知道为什么 A 中的行进入或没有进入 B。您可以修改以下任一答案来确定哪些行应该在 B 中但没有进入。
-
为什么不在每张桌子上都有 PK?如果你有一个组合键,你至少应该有一个代理 PK 和一个定义记录的值组合的唯一索引。如果表 A 只是一个临时表,并且仅用于在移动到表 b 之前存储数据以进行清理,那么也许您可以在没有唯一索引的情况下逃脱(因为也许您还没有清理数据以使其唯一)但是我什至对这些表也进行了 PK,因为能够唯一标识一条记录非常有帮助。
-
表 A 和 C 是从数据库中的其他表聚合数据的表。表 B 是用于生成报告的视图的基表。这就是它的设计方式,而不是我的决定,我无法改变它。我只需要与之斗争。
标签: sql-server tsql sql-server-2000