How to delete the top 1000 rows from a table using Sql Server 2008?

sql, sql-delete, sql-server

Solution

The code you tried is in fact two statements. A `DELETE` followed by a `SELECT`.

You don't define `TOP` as ordered by what.

For a specific ordering criteria deleting from a CTE or similar table expression is the most efficient way.

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

Problem

I have a table in SQL Server. I would like to delete the top 1000 rows from it. However, I tried this, but I instead of just deleting the top 1000 rows it deleted all the rows in the table. Here is the code: ``` delete from [mytab] select top 1000 a1,a2,a3 from [mytab] ```

Original source

Related problems