Удалите 'первую' запись из таблицы в SQL Server, без ГДЕ условие

Это поздний ответ, но вы можете попробовать использовать CDATA

<field name="roleEdit">
    <field-validator type="fieldexpression">
        <param name="expression"><![CDATA[roleEdit == null || roleEdit.isEmpty() || roleEdit == "user" || roleEdit == "admin"]]></param>
        <message>Only admin and user allowed</message>
    </field-validator>
</field>

Внимание! Это не будет проверять, является ли roleEdit пустым или нулевым.

66
задан marc_s 19 November 2010 в 16:51
поделиться

6 ответов

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

Обратите внимание, что

DELETE TOP (1)
FROM   mytable

также будет работать, но, как указано в документации :

Строки, указанные в выражении TOP , используемом с INSERT , UPDATE или DELETE , не расположены ни в каком порядке. 1259] Поэтому

134
ответ дан DigitalDan 24 November 2019 в 14:50
поделиться

зависит от вашей СУБД (кажется, что люди не знают, что это такое в настоящее время)

-- 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;
41
ответ дан soulmerge 24 November 2019 в 14:50
поделиться

Нет, AFAIK, это невозможно сделать переносимым.

В любом случае не существует определенной «первой» записи - на разных движках SQL вполне возможно, что « SELECT * FROM table » может возвращать результаты в разном порядке каждый раз.

6
ответ дан Alnitak 24 November 2019 в 14:50
поделиться

Определить «Первый»? Если у таблицы есть PK, то она будет упорядочена по этому, и вы можете удалить этим:

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

Если у таблицы нет PK, то упорядочение не будет гарантировано ...

3
ответ дан Meff 24 November 2019 в 14:50
поделиться

Это действительно имеет смысл?
В реляционной базе данных нет «первой» записи, вы можете удалить только одну случайную запись.

1
ответ дан Christian Specht 24 November 2019 в 14:50
поделиться

Что вы подразумеваете под «первой» записью из таблицы »? Я думаю, что в реляционной базе данных нет такого понятия, как «первая запись».

Использование MS SQL Server 2005, если вы собираетесь удалить «верхнюю запись» (первую, которая появляется, когда вы делаете простую »* выберите * из таблицы * "), вы можете использовать" delete top (1) из таблицы "... но помните, что это не гарантирует, какая строка будет удалена из набора записей, так как она просто удаляет первая строка, которая будет представлена, если вы запустите команду " выберите top (1) из имени таблицы ".

1
ответ дан XpiritO 24 November 2019 в 14:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: