Как удалить верхние 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
это быстро. Попробуйте:
DELETE FROM YourTABLE
FROM (SELECT TOP XX PK FROM YourTABLE) tbl
WHERE YourTABLE.PK = tbl.PK
заменить YourTABLE
на имя таблицы,
XX
число, например 1000,
pk
- имя поля первичного ключа таблицы.