我在SQL Server中有一张表。我想从中删除前1000行。但是,我尝试了此操作,但我不仅仅是删除了前1000行,而是删除了表中的所有行。
这是代码:
delete from [mytab]
select top 1000
a1,a2,a3
from [mytab]
8
你需要一个ORDER BY,使TOP有意义的:@马丁看到史密斯的回答这是唯一的五到有这一个。有时我感到绝望
—
gbn 2012年
您要删除任何 1000行吗?只是随机选择的?或者,例如,最古老的1000行?
—
Nick Chammas 2012年
您删除了所有表,因为它
—
Nick Chammas 2012年
delete from [mytab]
是一个语句,而select top ...
另一个语句。
您不需要订购顶部,这取决于您为什么要做顶部。如果需要删除1000万行并具有1 GB的可用日志空间,请使用dbo.myTable中的Delete TOP(10000)(带有select子句)并继续运行它,直到没有要删除的行为止。谁在乎它是否武断。排序只会减慢查询速度。
—
tvanharp
我意识到这是一个古老的问题(在SO年中),但我确实认为人们考虑@gbn的评论很重要。尽管他的评论不适用于我的给定情况(试图删除记录块而不会引起LOCK问题,但实际上并不关心删除它们的顺序),但它们很可能适用于您的情况。确保在盲目利用下面不包含ORDER BY子句的答案之前考虑它们。
—
安德鲁·斯蒂兹