有人可以请帮我查询,从一个有20000行的表中只删除500行。也必须比特定日期更早。
感谢您的帮助,
Soofy
答案 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什么......