2012-10-17 114 views
3

如果使用select語句:是選擇Top(n)還是Delete Top(n)是否相同?

select top (18) * from pippo; 

我使用DELETE語句:

delete top (18) from pippo; 

我想知道,如果18個選擇和刪除行是相同的。
任何幫助?

編輯之後已經接受了答案:

我已經找到了以下解決方案在這裏:Delete the 'first' record from a table in SQL Server, without a WHERE condition

WITH q AS 
     (
     SELECT TOP 18 * 
     FROM pippo 
     ORDER BY FIELD1 ASC /* You may want to add ORDER BY here */ 
     ) 
DELETE 
FROM q 

有了這個解決方案我有點所有FIELD1的「皮波」表,然後我刪除前18行。

+2

即使你有一個'ORDER BY'子句,你需要確保它定義了所有行的完整排序,否則它仍然會被定義得很差(例如,如果有50行,其中a ='abc',然後'前18 ... ...按順序'可能會選擇不同的18每次) –

回答

6

沒有訂單條款,沒有保證訂購,所以不,不保證是相同的。

+1

也可能有其他進程,插入或刪除數據。所以你永遠不知道哪18條記錄被刪除 –