SQL Serverデータベースに構成テーブルがあり、このテーブルには1行しかありません。将来の開発者がこれを理解できるように、複数行のデータが追加されないようにしたいと思います。以下のように、このためにトリガーを使用することを選択しました...
ALTER TRIGGER OnlyOneConfigRow
ON [dbo].[Configuration]
INSTEAD OF INSERT
AS
BEGIN
DECLARE @HasZeroRows BIT;
SELECT @HasZeroRows = CASE
WHEN COUNT (Id) = 0 THEN 1
ELSE 0
END
FROM
[dbo].[Configuration];
IF EXISTS(SELECT [Id] FROM inserted) AND @HasZeroRows = 0
BEGIN
RAISERROR ('You should not add more than one row into the config table. ', 16, 1)
END
END
これはエラーをスローしませんが、最初の行に入ることを許可していません。
また、テーブルに挿入できる行の数をこれよりも1つだけに制限する、より効果的で自己説明的な方法はありますか?組み込みのSQL Server機能がありませんか?
2
元のアプローチが機能しなかった理由の説明と同様に、Insert Ofトリガーを使用します。つまり、insertステートメントの代わりにコードが実行されます。したがって、挿入を実行するには、トリガーの一部として明示的に挿入する必要があります。
—
スコットM