sql server游标比较

时间:2011-11-02 14:08:51

标签: sql-server cursor

我有2个光标,其中光标1有select * from table 1,光标2有select * from table 2。我需要比较2个游标,如果游标1中的获取行不等于游标2的获取行,那么我想从表2中删除该获取的行。请帮我怎么做?

2 个答案:

答案 0 :(得分: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 ....

或类似的东西。

答案 1 :(得分: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
)