ビューにいくつかのフィールドを追加または編集するたびに、「ビューの更新」スクリプトを作成して実行する必要があるのはなぜですか?
SQL Server は、Management Studio の洗練されたビュー編集ウィンドウでビューを編集するときにビューを更新する必要があることを理解していますが、スクリプトを使用してビューを編集した後、ビューを更新するように指示できないのはなぜでしょうか?
ビューにいくつかのフィールドを追加または編集するたびに、「ビューの更新」スクリプトを作成して実行する必要があるのはなぜですか?
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
ビュー定義でWITH SCHEMABINDINGを使用して、更新の必要性をなくします
そしてデザイナーではなくALTER VIEWとの組み合わせで
編集、2012 年 7 月、上記のリンクから。私の大胆な
スキーマバインディング
基になるテーブルまたはテーブルのスキーマにビューをバインドします。SCHEMABINDING が指定されている場合、ビュー定義に影響を与えるような方法でベース テーブルを変更することはできません。ビュー定義自体を最初に変更または削除して、変更するテーブルへの依存関係を削除する必要があります。SCHEMABINDING を使用する場合、select_statement には、参照されるテーブル、ビュー、またはユーザー定義関数の 2 つの部分の名前 (schema.object) を含める必要があります。参照されるすべてのオブジェクトは、同じデータベースにある必要があります。
SCHEMABINDING 句で作成されたビューに参加するビューまたはテーブルは、そのビューが削除または変更されてスキーマ バインディングがなくなるまで削除できません。それ以外の場合、データベース エンジンはエラーを発生させます。また、スキーマ バインディングを持つビューに参加するテーブルで ALTER TABLE ステートメントを実行すると、これらのステートメントがビュー定義に影響を与える場合に失敗します。