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)更輕鬆高效地執行此操作**。 –