ユーザー定義関数でチェック制約を使用します。使用してトリガーを超える本の2つの利点があります
:
- これは、制約がために設計されているチェックするものです。
- トリガを使用するには、挿入トリガと更新トリガの代わりに、トリガを使用する必要があります。その結果、コードが長くなり、書き込みやメンテナンスが難しくなります。ここで
簡単な例です:
は、テストテーブルを作成します。
CREATE TABLE Test
(
Col1 int
)
GO
は、検証関数を作成します。
CREATE FUNCTION dbo.IsValueAllowed
(
@Value int
)
RETURNS bit
AS
BEGIN
IF (SELECT COUNT(*) FROM Test WHERE Col1 = @Value) > 4 RETURN 0
RETURN 1
END
GO
は、テーブルに
ALTER TABLE Test
ADD CONSTRAINT ck_RestrictCol1 CHECK (dbo.IsValueAllowed(Col1) = 1)
GO
をチェック制約を追加します。 の
テスト:トリガーがどうなる
INSERT INTO Test VALUES
(1), (1), (1), (1),
(2), (2), (2)
INSERT INTO Test VALUES (2)
SELECT *
FROM Test
INSERT INTO Test VALUES (1) -- This will fail with an error message: The INSERT statement conflicted with the CHECK constraint "ck_RestrictCol1"
see a live demo on rextester.
。複合キーを使用し、2番目の列に値を制限することによって、他のオプションもあります。しかし、その場合、2列目の値の増分はビジネスレイヤーで維持する必要があります。 – MKR
トリガーに同意します。関数を呼び出すテーブルにチェック制約を置くことはできますが、それは理想的ではありません。また、ロジックを含むストアドプロシージャを書き込むこともできます。 – squillman