2011-11-02 51 views
0

我有2個遊標,其中游標1有select * from table 1和遊標2有select * from table 2。我需要比較2個遊標,並且如果遊標1中的取出的行不等於取出的遊標2的行,那麼我想從表2中刪除取出的行。請幫助我如何執行此操作?sql服務器遊標比較

+1

說真的:擺脫遊標!您可以通過基於集合的操作(如'EXCEPT和INTERSECT')(http://msdn.microsoft.com/zh-cn/library/ms188055.aspx)更輕鬆高效地執行此操作**。 –

回答

1

您可以使用EXCEPT來識別更改的行。

;WITH DirtyRows AS 
(
    SELECT * FROM [Table 1] 
    EXCEPT 
    SELECT * FROM [Table 2] 
) 
DELETE [Table 2] 
WHERE EXISTS 
(
    SELECT * FROM DirtyRows 
    WHERE DirtyRows.Id = [Table 2].Id 
) 
1

你爲什麼會想這樣做使用遊標?如果我理解正確的話,你可以這樣做:

DELETE B 
FROM table1 A 
INNER JOIN table2 B 
ON A.Id = B.Id 
WHERE A.column1 <> B.column1 OR A.column2 <> B.Column2 .... 

或者類似的東西。