このSQL句でレコードを削除できます。
DELETE FROM TABLE WHERE ID = 2
「ID=2」であっても、テーブル数= 1の場合は、常に1つのレコードを残す必要があります。これどうやってするの?
このSQL句でレコードを削除できます。
DELETE FROM TABLE WHERE ID = 2
「ID=2」であっても、テーブル数= 1の場合は、常に1つのレコードを残す必要があります。これどうやってするの?
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);
カウントが1を超えていることを確認するために、ifステートメントを追加することもできます。
簡単な方法は、テーブルを空にする削除を禁止することです
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つの行があります」が、実際には「どの行ですか?」