何年も実行されているビューは、いくつかのテーブルから特定の列を選択して結合します。最近、テーブルの 1 つに列を追加したところ、ビューが正しく機能しなくなりました。クエリ結果の列の 1 つに、テーブルの別の列からのデータが含まれていました。スクリプトからビューを再構築しました-スクリプトに変更はありません-そして問題はなくなりました。ビューは新しい列を見ません。
何が起こっている?
何年も実行されているビューは、いくつかのテーブルから特定の列を選択して結合します。最近、テーブルの 1 つに列を追加したところ、ビューが正しく機能しなくなりました。クエリ結果の列の 1 つに、テーブルの別の列からのデータが含まれていました。スクリプトからビューを再構築しました-スクリプトに変更はありません-そして問題はなくなりました。ビューは新しい列を見ません。
何が起こっている?
クエリは SELECT * を使用しています。再コンパイルするだけです。
ビューがコンパイルされると、フィールドの名前ではなく、レコード内のフィールドのオフセットがコンパイルされます。基になるテーブルが変更された場合。. . オフセットが正しい位置に移動しなくなりました。
残念ながら、私は昔々、数値が数値エラーになる理由を解明しようとして約 5 時間後にこのことを知りました -- 午前 6:00 から。
SQL Server Management Studio を使用して、ビューを別のスクリプトとしてスクリプト化し、コードを (変更なしで) 実行することで、再コンパイルを行います。ただし、列の明示的なリストを挿入することでコードを変更でき、将来この問題が発生することはありません。
将来この問題を防ぐために、毎晩すべてのビューを再コンパイルするスクリプトを設定することもできます。現在、そのようなスクリプトもあります。