質問

「ビューの更新」スクリプトを作成する必要があるのはなぜですか, ビューにフィールドを追加または編集するたびにそれらを実行しますか?

SQL Server は、Management Studio の高度なビュー編集ウィンドウでビューを編集するときにビューを更新する必要があることを理解しています。なぜ、スクリプトを通じてビューを編集した後にビュー自体を更新するように指示できないのでしょうか?

役に立ちましたか?

解決

基礎となるテーブルが変更された場合は、ビューを更新する必要があります。これにより、ビューの列のデータ型が変更されたり、インデックスが再配置されたりする可能性があります。したがって、知る必要があります。そうしないと、クエリを実行すると、すぐに爆発してしまいます。

走らなくてもいいよ sp_refreshview ビューを変更するため。基礎となるテーブルを変更する場合のみ。

また、ハッピーファンボールを野次らないでください。

編集:このコードを(連続して)実行して、問題を再現してみました。期待どおりに動作しましたが、残念ながらできませんでした (SQL Server 2008)。

create view MyView
as
select ProductKey, ProductID, ProductName, Price
from dbo.Products

select v.* from MyView v

alter view MyView
as
select ProductKey, ProductID, ProductName, Price*100 as MyPrice
from dbo. Products

select v.* from MyView v

他のヒント

使用 スキーマバインディングあり ビュー定義内で更新の必要性を排除します。

デザイナーではなく、ALTER VIEW と組み合わせて

編集、2012 年 7 月、上記のリンクから。私の大胆な

スキーマバインディング

ビューを基になるテーブルのスキーマにバインドします。SCHEMABINDING が指定されている場合、ベース テーブルまたはテーブル ビュー定義に影響を与えるような方法で変更することはできません. 。変更するテーブルへの依存関係を削除するには、最初にビュー定義自体を変更または削除する必要があります。SCHEMABINDING を使用する場合、select_statement には、参照されるテーブル、ビュー、またはユーザー定義関数の 2 つの部分からなる名前 (schema.object) が含まれている必要があります。参照されるすべてのオブジェクトは同じデータベース内に存在する必要があります。

SCHEMABINDING 句で作成されたビューに参加するビューまたはテーブル 落とせない ただし、そのビューが削除または変更されてスキーマ バインディングがなくなる場合は除きます。それ以外の場合、データベース エンジンはエラーを発生させます。また、実行すると、 スキーマ バインディングを持つビューに参加するテーブルに対する ALTER TABLE ステートメントが失敗する これらのステートメントがビュー定義に影響を与える場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top