2

我可以用这个 SQL 子句删除记录,

DELETE FROM TABLE WHERE ID = 2

如果表数 = 1,即使“ID = 2”,我也需要始终保留一条记录。我怎样才能做到这一点?

4

3 回答 3

4

添加 WHERE 子句以确保有不止一行:

DELETE FROM TABLE 
WHERE ID = 2
AND (SELECT COUNT(*) FROM TABLE) > 1
于 2009-10-18T16:11:57.067 回答
1

未经测试,但是这方面的东西可能有用吗?

DELETE FROM TABLE WHERE ID = 2 LIMIT (SELECT COUNT(*)-1 FROM TABLE WHERE ID=2);

也许添加一个 if 语句以确保计数大于 1。

于 2009-10-18T15:24:22.720 回答
1

简单的方法是禁止任何清空表的删除

CREATE TRIGGER TRG_MyTable_D FOR DELETE
AS
IF NOT EXISTS (SELECT * FROM MyTable)
    ROLLBACK TRAN
GO

更复杂的是,如果你执行这个清空表的多行删除怎么办?

DELETE FROM TABLE WHERE ID BETWEEN 2 AND 5

所以,从你刚刚删除的内容中随机重新填充

CREATE TRIGGER TRG_MyTable_D FOR DELETE
AS
IF NOT EXISTS (SELECT * FROM MyTable)
    INSERT mytable (col2, col2, ..., coln)
    SELECT TOP 1 col2, col2, ..., coln FROM INSERTED --ORDER BY ??

GO

但是,这个要求有点危险和模糊。用英语,OK,“总是在表中至少有一行”,但实际上是“哪一行?”

于 2009-10-18T15:26:56.987 回答