ОБНОВЛЕНИЕ: упс! @gbn прав, мой образец ORDER BY был сломан! Обновление с правильным примером кода.
В наиболее распространенном случае, когда "top" основан на порядке значений в определенном столбце или столбцах, вы можете использовать CTE и ROW_NUMBER для имитации упорядоченного TOP:
WITH cte AS
(
SELECT *, ROW_NUMBER() OVER(ORDER BY SomeColumn, OtherColumn) AS RowNum
FROM table
)
DELETE FROM cte
WHERE RowNum <= 1;
См. статью Ицик Бэн-Гана по SQLMag в TOP для получения дополнительной информации об этом предлагаемом паттерне.
Если вы просто хотите удалить любую строку из набора дубликатов или просто по какой-то причине хотите удалить случайную строку, тогда можно опустить ORDER BY и сделать что-то попроще:
DELETE TOP (1) FROM table
Цитирование из УДАЛИТЬ документы на MSDN :
TOP (выражение) [PERCENT]
Определяет количество или процент
случайные строки, которые будут удалены.
Выражение может быть числом или
процентов строк. Строки
ссылка в используемом выражении TOP
с INSERT, UPDATE или DELETE не
расположены в любом порядке.
Скобки, ограничивающие выражение в
ТОП требуются во ВСТАВКА, ОБНОВЛЕНИЕ,
и УДАЛИТЬ заявления. Для большего
информацию см. TOP (Transact-SQL).