在sql中删除表中所有行的最好方法是什么,但将n行保留在顶部?
发布于 2008-09-05 17:52:24
我会选择ID列要保存到临时表或表变量中的行集。然后删除临时表中不存在的所有行。另一个用户提到的语法:
DELETE FROM Table WHERE ID NOT IN (SELECT TOP 10 ID FROM Table)
有一个潜在的问题。"SELECT TOP 10“查询将针对表中的每一行执行,这可能会对性能造成巨大的影响。您希望避免一遍又一遍地进行同一查询。
基于您所列出的原始SQL语句,此语法应该有效:
create table #nuke(NukeID int)
insert into #nuke(Nuke) select top 1000 id from article
delete article where not exists (select 1 from nuke where Nukeid = id)
drop table #nuke
发布于 2012-11-05 13:18:43
我认为使用虚拟表比使用IN子句或临时表要好得多。
DELETE
Product
FROM
Product
LEFT OUTER JOIN
(
SELECT TOP 10
Product.id
FROM
Product
) TopProducts ON Product.id = TopProducts.id
WHERE
TopProducts.id IS NULL
发布于 2009-02-03 22:15:44
这实际上是特定于语言的,但我可能会对SQL server使用类似以下内容的内容。
declare @n int
SET @n = SELECT Count(*) FROM dTABLE;
DELETE TOP (@n - 10 ) FROM dTable
如果您不关心确切的行数,总会有
DELETE TOP 90 PERCENT FROM dTABLE;
https://stackoverflow.com/questions/46385
复制相似问题