0

我有 3 张桌子:

  1. 暂存:每月插入员工记录。
  2. Master:表包含所有先前输入的暂存记录,唯一记录。
  3. 更改:跟踪所有更改 - 没有主键。

这些表有 10 列。在暂存表中,每个月我们有大约 2,500,000 条记录。使用游标,我可以将新记录从登台插入到主表中。

在更新方面,我使用内部联接从主表中已经存在的暂存中获取记录。

要了解是否有任何员工信息已更改,我是否必须查询以下内容:

WHERE Staging.FirstName <> Master.FirstName
   OR Staging.LastName <> Master.LastName
   OR ...

等等10列,还是有更简单的方法?

4

2 回答 2

1

If the two tables really are identical, you could create a persisted computed column in each table that represents a checksum of the entire row (see http://technet.microsoft.com/en-us/library/ms189788.aspx), create an index on that, and then use that for your joins.

于 2013-10-16T19:28:39.593 回答
1

对数百万行使用光标听起来并不有趣。

也许你应该看看 EXCEPT/MERGE

WITH NewAndChanged AS (
    SELECT Stage.Id
          ,Stage.Col1
          ,Stage.Col2
    FROM Stage
  EXCEPT
    SELECT Master.Id
          ,Master.Col1
          ,Master.Col2
    FROM Master
)
MERGE Master
USING NewAndChanged
      ON Master.Id = NewAndChanged.Id
WHEN MATCHED
     THEN UPDATE SET
         Col1 = NewAndChanged.Col1
        ,Col2 = NewAndChanged.Col2
WHEN NOT MATCHED
     THEN INSERT (
              Id
             ,Col1
             ,Col2
          )
          VALUES (
              NewAndChanged.Id
             ,NewAndChanged.Col1
             ,NewAndChanged.Col2
          )
于 2013-10-16T22:22:06.073 回答