0

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

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 并设置 table2 中额外列的默认值。

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

4

3 回答 3

2

如果表具有相同的列定义,最快的方法就是使用'except'子句:

SELECT * from Table1
except
SELECT * from Table2

也以相反的方式运行它:

SELECT * from Table2
except
SELECT * from Table1

您将看到确切的设置差异:

除了和相交

于 2012-12-07T18:49:45.747 回答
1

Redgate 有一个很好的工具,如果你宁愿花几美元:

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

于 2012-12-07T16:31:22.590 回答
0

你就不能...

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

...然后对右“一半”为 NULL 的行执行 INSERT 并为那些不是的行执行 UPDATE?

于 2012-12-07T17:12:16.453 回答