SQL:按记录比较两个表记录

时间:2012-12-07 16:22:06

标签: sql sql-server cursor fetch

我想比较记录的两个表记录。我为每个表都有两个光标。代码看起来像这样

Declare Cursor c1 for SELECT * from Table1
OPEN c1
While @@Fetch_status=0
Begin
  Declare Cursor c2 for SELECT * from Table2
  OPEN c2
  WHILE @@Fetch_Status=0
  Begin
     /*Comparison happens here*/
  END
END

在fecthing时,我必须指定我正在获取的光标以及如何执行此操作?

修改

对于Table1中的每条记录,我想

  • 根据主键搜索Table2以获取该记录。
  • 找到它时,我想根据table1中列的值更新Table2中的额外列值。
  • 当table2中缺少此记录时,我想复制它 从table1到table2并设置一个额外列的默认值 表2。

开放给其他解决方案(不限于游标)

3 个答案:

答案 0 :(得分:2)

如果表具有相同的列定义,则fastes方式只是使用'except'子句:

SELECT * from Table1
except
SELECT * from Table2

也以相反的方式运行它:

SELECT * from Table2
except
SELECT * from Table1

你会看到确切的设置差异:

<强> EXCEPT and INTERSECT

答案 1 :(得分:1)

Redgate has a great tool ,如果您只是花几美元:

您可以免费试用,看看它是否符合您的需求。

答案 2 :(得分:0)

你能不能......

SELECT * FROM Table1 LEFT JOIN Table2 ON <your matching criteria>

...然后对右边的“half”为NULL的行执行INSERT,对那些不是的行执行UPDATE?