通常、SQLServerでビューをスキーマバインドすることをお勧めします。
ビューをスキーマバインドすると、ビューに影響を与えるような方法で基になるテーブルを変更できないようになります。スキーマバインディングがないと、基になるテーブルやその他のオブジェクトが変更されたり、削除されたりする可能性があります。その場合、ビューは期待どおりに機能しなくなります。
スキーマバインドビューを作成するには、WITH SCHEMABINDING
を使用します ビューを作成するためのT-SQLコードで。
例
スキーマバインドビューを作成する例を次に示します。
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
クエリでテーブルを参照するときに2つの部分からなる名前を使用したことに注意してください。dbo.Cats
を使用しました。 Cats
だけでなく 。これを行うことは、オブジェクトをバインドするスキーマの要件です。 2つの部分からなる名前を使用せずにオブジェクトをスキーマバインドしようとすると、エラーが発生します。
ビューをスキーマバインドしたので、その定義で参照されているテーブルを削除しようとすると、エラーが発生します:
DROP TABLE Cats;
結果:
Msg 3729, Level 16, State 1, Line 1 Cannot DROP TABLE 'Cats' because it is being referenced by object 'v_Cats'.
2つの部分からなる名前を使用せずにビューをスキーマバインドしようとすると、次のようになります。
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING AS SELECT CatId, CatName, Phone FROM Cats; GO
結果:
Msg 4512, Level 16, State 3, Procedure v_Cats, Line 5 Cannot schema bind view 'dbo.v_Cats' because name 'Cats' is invalid for schema binding. Names must be in two-part format and an object cannot reference itself.
その他のビュー属性
複数の属性はコンマで区切ることができます。 WITH
を指定する必要はありません 属性ごとに。
たとえば、ビューをスキーマにバインドする場合および 暗号化されている場合、これを行うことができます:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING, ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO