我可以用這個SQL條款刪除記錄,我要離開總是一個記錄,如果表中的記錄數= 1 SQL
DELETE FROM TABLE WHERE ID = 2
我要永遠留下一個記錄,如果表數= 1即使「ID = 2" 。我怎樣才能做到這一點?
我可以用這個SQL條款刪除記錄,我要離開總是一個記錄,如果表中的記錄數= 1 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
但要求是有點危險的,模糊的重新填充。在英語中,「在表格中至少有一行」,但在實踐中「哪一行?」
也謝謝。但是你的建議水平對我的SQL知識水平來說很難:)也許我可以在將來使用你的建議。 – Kerberos 2009-10-18 19:50:27
你能澄清你想要什麼?你想刪除表中除了一行以外的所有行嗎?或者你只想刪除'ID = 2 *'這一行*除非*它是表中唯一的一行? – VoteyDisciple 2009-10-18 15:16:40
是的,正如你所說我可以刪除表中的所有行,除了一個。但是,除了一個可以不是靜態值。 Andomar的建議效果很好。感謝您的關注。 – Kerberos 2009-10-18 19:47:22