SQL:逐记录比较两个表

SQL:逐记录比较两个表,sql,sql-server,cursor,fetch,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 进行此操作时,必须指

我想逐个记录比较两个表。每个表有两个光标。代码如下所示

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
进行此操作时,必须指定要获取的游标以及如何获取

编辑

对于表1中的每条记录,我想

  • 根据主键在表2中搜索该记录
  • 找到后,我想根据表1中某列的值更新表2中的额外列值
  • 当这个记录在表2中丢失时,我想复制它 从表1到表2,并在中设置额外列的默认值 表2
开放其他解决方案(不限于游标)

如果您愿意只花几美元:

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

如果您愿意只花几美元:

你可以免费试用看看它是否适合你的需要。

你就不能

SELECT * FROM Table1 LEFT JOIN Table2 ON <your matching criteria>
SELECT*FROM table 1 LEFT JOIN table 2 ON
…然后对右边“一半”为空的行执行INSERT,并对右边“一半”为空的行执行UPDATE?

您就不能

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

…然后对右边“half”为空的行执行INSERT,对右边“half”为空的行执行UPDATE?

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

SELECT * from Table1
except
SELECT * from Table2
也可以以相反的方式运行它:

SELECT * from Table2
except
SELECT * from Table1
您将看到确切的设置差异:


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

SELECT * from Table1
except
SELECT * from Table2
也可以以相反的方式运行它:

SELECT * from Table2
except
SELECT * from Table1
您将看到确切的设置差异:


为什么不将查询编写为联接?您应该提供您所谈论的数据库系统的信息。它是mysql、pgsql、,oracle还是mssql系统?很抱歉,当我们遇到询问者在评论中提出的SQL问题时,
我如何加入?
那么这可能不是一个适合该网站的问题。@jpo也许如果你告诉我们你希望完成的所有事情,我们可以帮助你找到一个好的解决方案。否则,我们只会在风车上来回摆动,在每次失败/不满意的尝试后只获得我们需要的信息。为什么不将查询作为连接编写?您应该提供您所谈论的数据库系统的信息。它是mysql、pgsql、,oracle还是mssql系统?很抱歉,当我们遇到询问者在评论中提出的SQL问题时,
我如何加入?
那么这可能不是一个适合该网站的问题。@jpo也许如果你告诉我们你希望完成的所有事情,我们可以帮助你找到一个好的解决方案。否则,我们只会在风车上摇摆不定,在每一次失败/不满意的尝试后只获得我们需要的信息。