2017-01-29 5 views
0

私は現在、ビューからMicrosoftのドキュメントを読んでいますが、 "チェックオプション付き"について読んだところで混乱しています。ドキュメントには例がありません。誰かが私を簡単な例にすることはできますか?私は例で分かりやすい。"チェックオプション付き"のSQLビュー

CHECK OPTION に対して実行されるすべてのデータ変更ステートメントを、select_statement内で設定された基準に従わせるように強制します。 行がビューを通して変更されると、WITH CHECK OPTIONは、 がコミットされた後に、 のデータがビューを通して可視のままであることを確認します。

答えて

1

それはあなたが行(複数可)ので、ビューで持っているものは何でもwhere声明の観点から消えるだろうと、ビューを経由して、このような更新を行うことができないという意味ではありませんが、もう行が一致しません。

ビュー:テーブルを使用して

create view xxx as select * from table where status = 1 

更新(OK):ビューを使用して

update table set status = 2 where id = 3 

が更新(OKではない):

update xxx set status = 2 where id = 3 

、あなたがこれを行うならば行が消えるようにします。

+0

基本的に行を挿入/更新/表示後に表示できない場合は、「チェックオプション付き」で修正を行うことはできません。 – pete

+0

はい、そうです –

1

以下は、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 制約の対象となりませんでした。

関連する問題