2011-11-02 67 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 .... 

或者类似的东西。