从表中仅删除500行

时间:2009-05-03 04:35:40

标签: sql sql-server tsql

有人可以请帮我查询,从一个有20000行的表中只删除500行。也必须比特定日期更早。

感谢您的帮助,

Soofy

6 个答案:

答案 0 :(得分:9)

您可以像在选择

中一样使用Top关键字
Delete Top (500) 
From myTable
Where Date < '01/01/2009'

答案 1 :(得分:6)

如果您使用的是SQL 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
)

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

答案 3 :(得分:1)

SET ROWCOUNT 500

DELETE FROM TableName WHERE TheDate&lt; @YourDate

答案 4 :(得分:1)

Top仅适用于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

答案 5 :(得分:0)

我要添加的唯一内容是您可能希望在大多数查询结束时使用“ORDER BY [DATE] DESC”。如果您有多个匹配日期,则需要添加其他列排序以删除正确的值。

当然,这假设你实际上有一个“createddate”或“modifieddate”可以用来排序。您没有指定它是最早创建的还是最旧的未修改。 (即如果ID = 1是最旧的,但我昨天修改过它还是会被删除?)如果你按主键排序,你需要小心 - 假设你使用的是递增主键而不是GUIDs什么......