我可以用这个 SQL 子句删除记录,
DELETE FROM TABLE WHERE ID = 2
如果表数 = 1,即使“ID = 2”,我也需要始终保留一条记录。我怎样才能做到这一点?
我可以用这个 SQL 子句删除记录,
DELETE FROM TABLE WHERE ID = 2
如果表数 = 1,即使“ID = 2”,我也需要始终保留一条记录。我怎样才能做到这一点?
添加 WHERE 子句以确保有不止一行:
DELETE FROM TABLE
WHERE ID = 2
AND (SELECT COUNT(*) FROM TABLE) > 1
未经测试,但是这方面的东西可能有用吗?
DELETE FROM TABLE WHERE ID = 2 LIMIT (SELECT COUNT(*)-1 FROM TABLE WHERE ID=2);
也许添加一个 if 语句以确保计数大于 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,“总是在表中至少有一行”,但实际上是“哪一行?”