Как удалить верхние 1000 строк из таблицы с помощью Sql Server 2008?
У меня есть таблица в SQL Server. Я хотел бы удалить из него верхние 1000 строк. Однако я попробовал это, но вместо того, чтобы просто удалить верхние 1000 строк, он удалил все строки в таблице.
вот код:
delete from [mytab]
select top 1000
a1,a2,a3
from [mytab]
6 ответов:
код, который вы пробовали, на самом деле два оператора. А
DELETE
затемSELECT
.вы не определите
TOP
как приказано чем.для конкретного условия заказа удаление из CTE или подобное табличное выражение является наиболее эффективным способом.
;WITH CTE AS ( SELECT TOP 1000 * FROM [mytab] ORDER BY a1 ) DELETE FROM CTE
может быть лучше для sql2005+ использовать:
DELETE TOP (1000) FROM [MyTab] WHERE YourConditions
Для Sql2000:
DELETE FROM [MyTab] WHERE YourIdField IN ( SELECT TOP 1000 YourIdField FROM [MyTab] WHERE YourConditions )
но
Если вы хотите удалить конкретные подмножество строк вместо произвольного подмножества, вы должны явно указать порядок подзапроса:
DELETE FROM [MyTab] WHERE YourIdField IN ( SELECT TOP 1000 YourIdField FROM [MyTab] WHERE YourConditions ORDER BY ExplicitSortOrder )
спасибо tp @gbn за упоминание и требование более четкого и точного ответа.
Как определено в ссылке ниже, вы можете удалить прямо вперед
USE AdventureWorks2008R2; GO DELETE TOP (20) FROM Purchasing.PurchaseOrderDetail WHERE DueDate < '20020701'; GO
http://technet.microsoft.com/en-us/library/ms175486 (v=sql. 105). aspx