0
我有2个游标,其中游标1有select * from table 1
和游标2有select * from table 2
。我需要比较2个游标,并且如果游标1中的取出的行不等于取出的游标2的行,那么我想从表2中删除取出的行。请帮助我如何执行此操作?sql服务器游标比较
我有2个游标,其中游标1有select * from table 1
和游标2有select * from table 2
。我需要比较2个游标,并且如果游标1中的取出的行不等于取出的游标2的行,那么我想从表2中删除取出的行。请帮助我如何执行此操作?sql服务器游标比较
您可以使用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
)
你为什么会想这样做使用游标?如果我理解正确的话,你可以这样做:
DELETE B
FROM table1 A
INNER JOIN table2 B
ON A.Id = B.Id
WHERE A.column1 <> B.column1 OR A.column2 <> B.Column2 ....
或者类似的东西。
说真的:摆脱游标!您可以通过基于集合的操作(如'EXCEPT和INTERSECT')(http://msdn.microsoft.com/zh-cn/library/ms188055.aspx)更轻松高效地执行此操作**。 –