68 votos

Eliminar el 'primer' registro de una tabla en Sql Server, sin una condición WHERE

¿Es posible eliminar el "primer" registro de una tabla en SQL Server sin utilizar ningún WHERE y sin usar un cursor?

139voto

Quassnoi Puntos 191041
WITH  q AS
        (
        SELECT TOP 1 *
        FROM    mytable
        /* You may want to add ORDER BY here */
        )
DELETE
FROM    q

Tenga en cuenta que

DELETE TOP (1)
FROM   maytable

también funcionará, pero, como se indica en el documentación :

Las filas referenciadas en el TOP expresión utilizada con INSERT , UPDATE o DELETE no están dispuestos en ningún orden.

Por lo tanto, es mejor que utilice WITH decisión con ORDER BY que le permitirá especificar con mayor exactitud qué fila considera la primera.

42voto

soulmerge Puntos 37314

depende de su DBMS (parece que la gente no sabe lo que es eso hoy en día)

-- MYSql:
DELETE FROM table LIMIT 1;
-- Postgres:
DELETE FROM table LIMIT 1;
-- MSSql:
DELETE TOP(1) FROM table;
-- Oracle:
DELETE FROM table WHERE ROWNUM = 1;

6voto

Alnitak Puntos 143355

No, AFAIK, no es posible hacerlo de forma portátil.

De todos modos, no hay un "primer" registro definido: en diferentes motores SQL es perfectamente posible que " SELECT * FROM table " puede devolver los resultados en un orden diferente cada vez.

3voto

Meff Puntos 4347

¿Definir "Primero"? Si la tabla tiene un PK entonces se ordenará por eso, y se puede borrar por eso:

DECLARE @TABLE TABLE
(
    ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    Data NVARCHAR(50) NOT NULL
)

INSERT INTO @TABLE(Data)
SELECT 'Hello' UNION
SELECT 'World' 

SET ROWCOUNT 1
DELETE FROM @TABLE
SET ROWCOUNT 0

SELECT * FROM @TABLE

Si la tabla no tiene PK, no se garantiza el ordenamiento...

1voto

Christian Specht Puntos 15907

¿Tiene esto realmente sentido?
En una base de datos relacional no hay un "primer" registro, sólo se puede eliminar un registro al azar.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X