2

このSQL句でレコードを削除できます。

DELETE FROM TABLE WHERE ID = 2

「ID=2」であっても、テーブル数= 1の場合は、常に1つのレコードを残す必要があります。これどうやってするの?

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);

カウントが1を超えていることを確認するために、ifステートメントを追加することもできます。

于 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、「テーブルには常に少なくとも1つの行があります」が、実際には「どの行ですか?」

于 2009-10-18T15:26:56.987 に答える