Как удалить 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 .....