以下は、CHECK OPTION
の動作を示す例です。
CREATE TABLE dbo.Table1(Col1 int);
CREATE TABLE dbo.Table2(Col2 int);
INSERT INTO dbo.Table1 (Col1) VALUES(1);
INSERT INTO dbo.Table2 (Col2) VALUES(1);
GO
CREATE VIEW dbo.ViewWithCheckOption
AS
SELECT Table1.Col1, Table2.Col2
FROM dbo.Table1
JOIN dbo.Table2 ON Table1.Col1 = Table2.Col2
WITH CHECK OPTION;
GO
CREATE VIEW dbo.ViewWithoutCheckOption
AS
SELECT Table1.Col1, Table2.Col2
FROM dbo.Table1
JOIN dbo.Table2 ON Table1.Col1 = Table2.Col2;
GO
SELECT Col1, Col1 FROM dbo.ViewWithoutCheckOption; --returns 1 row
INSERT INTO dbo.ViewWithoutCheckOption(Col1) VALUES(2); --succeeds
SELECT Col1, Col1 FROM dbo.ViewWithoutCheckOption; --still returns 1 row
SELECT Col1, Col1 FROM dbo.ViewWithCheckOption; --returns 1 row
INSERT INTO dbo.ViewWithCheckOption(Col1) VALUES(2); -- fails with error
エラーが返されます。ターゲットビューがチェックOPTIONまたは WITHいずれかを指定するので
メッセージ550、レベル16、状態1、行30しようとし、挿入または を更新に失敗しましたビューにまたがりますWITH CHECK OPTIONと1つ以上の行を指定します。操作の結果として は、CHECK OPTION 制約の対象となりませんでした。
基本的に行を挿入/更新/表示後に表示できない場合は、「チェックオプション付き」で修正を行うことはできません。 – pete
はい、そうです –