通常、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