2009-05-03 37 views
4

有人可以請幫我查詢從20000行的表中只刪除500行。還必須比特定日期更早。從表中刪除只有500行

感謝您的幫助,

Soofy

+0

SQL Server的哪個版本? 2000? 2005年? 2008年? 7.0? 6.5? – 2009-05-03 04:52:01

+1

你的意思是說,只要他們比特定的日期早,你就想刪除最早的500個?你說它的方式,以及下面的一些答案實現它的方式(我認爲),你可以把它留給數據庫來選擇要刪除的行,如果有足夠多的500個以上的話。 – 2009-05-03 05:33:19

回答

9

您可以使用Top關鍵詞,就像您在選擇

Delete Top (500) 
From myTable 
Where Date < '01/01/2009' 
+1

在MSSQL 2005中,「500」需要放在括號內。例如。刪除頂部(500)。 – 2009-05-03 04:41:59

+0

好的。修正它 – Jeremy 2009-05-03 04:49:27

+0

否則知道括號()...哈哈括號[] – 2009-05-03 04:53:17

1

SET ROWCOUNT 500

DELETE FROM表名WHERE TheDate < @YourDate

6

如果您使用S QL Server 2005中,你可以這樣做:

DELETE TOP (500) FROM your_table 
WHERE date_field < @my_particular_date 

,或者你可以這樣做:

SET ROWCOUNT 500 

DELETE your_table 
WHERE date_field < @my_particular_date 
在SQL Server 2000中

,你可以這樣做:

DELETE your_table 
WHERE pk_field IN (
    SELECT TOP (500) * FROM your_table 
    WHERE date_field < @my_particular_date 
) 
3
DELETE FROM Table_Name WHERE Primary_Key_Column IN (
    SELECT TOP 500 Primary_Key_Column FROM Table_Name WHERE [Date] < '01/01/2009' ORDER BY Primary_Key_Column ASC 
) 
1

首頁只適用於Transact Sql,每個sql都有自己的版本

MySQL和posGres

Delete 
From myTable 
Where Date < '01/01/2009' 
LIMIT 10; 

對於Oracle:

SELECT 
FROM myTable 
WHERE Date < '01/01/2009' 
and ROWNUM <= 10 
0

我補充一點的是,你可能想在大部分的這些到底使用 「ORDER BY [日期] DESC」查詢。如果您有多個匹配的日期,您需要添加額外的列排序以刪除正確的值。

這當然假設你確實有一個「createddate」或「modifieddate」,你可以用它來排序。您沒有指定它是最早創建的還是最舊的未修改的。 (也就是說,如果ID = 1是最老的,但是我昨天修改過它,如果它仍然被刪除?),如果按主鍵進行排序,則需要小心 - 假設您使用的是增量主鍵而不是GUID或者...