从SQL Server中的表中删除"第一个"记录,没有WHERE条件

Dha*_*ana 67 sql sql-server

是否可以从表中删除"第一个"记录SQL Server,而不使用任何WHERE条件且不使用游标?

Qua*_*noi 135

WITH  q AS
        (
        SELECT TOP 1 *
        FROM    mytable
        /* You may want to add ORDER BY here */
        )
DELETE
FROM    q
Run Code Online (Sandbox Code Playgroud)

注意

DELETE TOP (1)
FROM   mytable
Run Code Online (Sandbox Code Playgroud)

也会起作用,但是,正如文件中所述:

在引用的行TOP与使用的表达INSERT,UPDATEDELETE不按任何顺序排列.

因此,最好使用WITHORDER BY子句,它可以让您更准确地指定您认为哪一行是第一行.

  • 请注意,在表达式中使用`WITH`时,先前的sql语句应以分号(;)结尾 (2认同)

sou*_*rge 41

取决于你的DBMS(人们似乎不知道现在是什么)

-- 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;
Run Code Online (Sandbox Code Playgroud)


Aln*_*tak 6

不,AFAIK,它不可能便携.

无论如何都没有定义"第一"记录 - 在不同的SQL引擎上," SELECT * FROM table"每次都可能以不同的顺序返回结果.