9

他の2つのビュー(YおよびZと呼びます)によって呼び出されるベースビューであるビュー(Xと呼びます)があります。

今日、ビューXに変更を加えました。その後、ビューYとZが誤ったデータを戻し始めました。Management Studioを使用して実行SELECT * FROM Yすると(コードでビューが呼び出されるのとまったく同じです)、正しくないデータが返されます。ただし、ビューに含まれている実際のSQLを実行すると、問題はありませんでした。同僚がXとZを表示するスペースを追加してから、Alterを実行することを提案するまで、さまざまなことを試しました。すべてが正常に戻り、正常に実行されました。

私の質問は:MSSQLはそのビューをキャッシュしますか?もしそうなら、どのようにそれらを強制しないか、またはそれらを再コンパイルするように強制しますか?

また、これに関する追加の読み物が役立つでしょう。

4

2 に答える 2

11

sp_refreshviewコマンドを参照してください。

指定されたスキーマにバインドされていないビューのメタデータを更新します。ビューの永続的なメタデータは、ビューが依存する基礎となるオブジェクトが変更されたために古くなる可能性があります。

于 2008-12-16T23:26:08.477 に答える
8

SQL Server はビュー データをキャッシュしません (少なくとも、参照している方法では)。

ビュー定義に 'SELECT *' が含まれている場合、ビューの作成時に実際の列リストが定義されます。つまり、'SELECT *' は、ビューの作成時に存在する実際の列リストに置き換えられます。つまり、そのビューによって参照される基になるテーブルに列を追加しても、それはビューに表示されません。

于 2008-12-16T23:19:06.993 に答える