Sql 仅从表中删除500行

Sql 仅从表中删除500行,sql,sql-server,tsql,Sql,Sql Server,Tsql,谁能帮我查询一下,从一个有20000行的表中只删除500行。也必须早于特定日期 谢谢你的帮助 Soofy您可以像在选择中一样使用Top关键字 Delete Top (500) From myTable Where Date < '01/01/2009' 设置行数500 从日期所在的表名中删除如果您使用的是SQL Server 2005,则可以执行以下操作: DELETE TOP (500) FROM your_table WHERE date_field < @my_partic

谁能帮我查询一下,从一个有20000行的表中只删除500行。也必须早于特定日期

谢谢你的帮助


Soofy

您可以像在选择中一样使用Top关键字

Delete Top (500) 
From myTable
Where Date < '01/01/2009'
设置行数500


从日期所在的表名中删除如果您使用的是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
DELETE your_table
WHERE pk_field IN (
  SELECT TOP (500) * FROM your_table
  WHERE date_field < @my_particular_date
)
或者您可以这样做:

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

DELETE your_table
WHERE date_field < @my_particular_date
DELETE your_table
WHERE pk_field IN (
  SELECT TOP (500) * FROM your_table
  WHERE date_field < @my_particular_date
)
在SQL Server 2000中,可以执行以下操作:

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

DELETE your_table
WHERE date_field < @my_particular_date
DELETE your_table
WHERE pk_field IN (
  SELECT TOP (500) * FROM your_table
  WHERE date_field < @my_particular_date
)

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

我要补充的唯一一点是,您可能希望在大多数查询结束时使用orderby[DATE]DESC。如果有多个匹配日期,则需要添加额外的列顺序以删除正确的值


当然,这假定您实际上有一个createddate或modifieddate可以用来排序。您没有指定它是最早创建的还是最早未修改的。ie如果ID=1是最早的,但我昨天修改了它,是否仍应删除?如果您按主键排序,则需要小心使用它-假设您使用的是递增主键,而不是GUID或其他东西…

在MSSQL 2005 500中需要放在括号中。删除前500名。@Deviant--它们都是括号。具体地说,我可以说是圆括号。幸运的是,SQL Server和大多数编译器[您可能编写的编译器除外]都知道这一区别。这应该是[Date]<'01/01/2009',因为源代码是。poster希望删除较旧的日期,而不是较新的日期。抱歉。我已经编辑以反映这一点。对此原始问题的一票否决被标记为sqlserver,因此是T-SQL特定的答案。这并不否定这些答案的有效性,而且由于该问题的措辞不考虑SQL的味道,因此如果将来有人需要它,这将是有帮助的。哪个版本的sqlserver?2000? 2005? 2008? 7.0? 6.5?您的意思是要删除最早的500个,只要它们早于特定日期?我认为,按照您的措辞方式,以及下面的一些答案的实现方式,如果有超过500行的行足够长,则由数据库选择要删除的行。以select TOP x为例,您不需要指定order by,并且只返回pk吗_field@Jonathan,您可能会指定ORDER BY子句,然而,最初的问题并不是这样写的。他们不希望删除最早的500条记录,他们只希望删除500条恰好比某个特定日期早的记录。