2012-12-07 76 views
0

我想比較兩個記錄的記錄表。每個表格有兩個光標。該代碼看起來像這樣SQL:按記錄比較兩個表記錄

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,我必須指定我正在提取哪個遊標,我該怎麼做?

編輯

對於表1我想

  • 搜索表2基於該主鍵記錄每個記錄。
  • 找到它時,我想根據table1中的列值更新Table2中的額外列值。
  • 當這個記錄在表2中缺失時,我想將它從表1拷貝到 到表2中,並在 表2中設置額外列的默認值。

開放給其他的解決方案(不侷限於光標)

+4

爲什麼你不把這個查詢寫成一個連接嗎? –

+1

你應該提供你正在談論哪個db系統的信息。 – devanand

+0

@GordonLinoff你是什麼意思?我怎麼做? – jpo

回答

1

Redgate has a great tool這一點,如果你寧願只花幾元錢:

你可以得到一個免費試用,看看是否它適合你的需求。

0

你就不能......

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

...然後對於其右的「半壁江山」的行執行INSERT是NULL和UPDATE對於那些不是?

2

如果表中有相同的列定義,fastes方法就是使用「除」條款:

SELECT * from Table1 
except 
SELECT * from Table2 

也以相反的方式運行:

SELECT * from Table2 
except 
SELECT * from Table1 

你會看到確切的集區別:

EXCEPT and INTERSECT