Как удалить 1000 строк из таблицы с помощью Sql Server 2008?

У меня есть таблица в SQL Server. Я хотел бы удалить из него 1000 строк. Тем не менее, я попробовал это, но вместо того, чтобы просто удалять верхние 1000 строк, он удалил все строки в таблице.

Вот код:

delete from [mytab] 
select top 1000 
a1,a2,a3
from [mytab]

Ответ 1

Код, который вы пробовали, фактически является двумя операторами. A DELETE, за которым следует SELECT.

Вы не определяете TOP как упорядочено тем, что.

Для конкретного критерия сортировки наиболее эффективным является удаление из CTE или аналогичное табличное выражение.

;WITH CTE AS
(
SELECT TOP 1000 *
FROM [mytab]
ORDER BY a1
)
DELETE FROM CTE

Ответ 2

Может быть лучше для 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 за упоминание и требование более четкого и точного ответа.

Ответ 3

Как определено в приведенной ниже ссылке, вы можете удалить в прямом порядке

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

Ответ 4

delete from [mytab]
where [mytab].primarykeyid in
(
select top 1000 primarykeyid
from [mytab]
)

Ответ 5

Это быстро. Попробуйте:

DELETE FROM YourTABLE
FROM (SELECT TOP XX PK FROM YourTABLE) tbl
WHERE YourTABLE.PK = tbl.PK

Заменить YourTABLE именем таблицы, XX числом, например 1000, pk - это имя поля первичного ключа вашей таблицы.

Ответ 6

SET ROWCOUNT 1000;

DELETE FROM [MyTable] WHERE .....