テーブル定義を変更した場合は、Viewのメンテナンスを忘れずに
基本的にViewの項目取得に*(アスタリスク)を使用しなければ影響はないと思いますが、もしアスタリスクがある場合は,Viewが参照しているテーブルの定義を変更してしまうと、Viewとカラム(項目)がずれてしまったり、予期せぬことが発生してしまいます。エラーが出ればすぐに気づきますが、最悪エラーも出ずに項目がずれたままViewの値が取得されることもあります。
なので!!
- ViewでSELECT * FROM xxxxなどのアスタリスクは使わない!
- テーブル定義を変更した場合は念のためsp_refreshviewでViewをリフレッシュする。
この二つは、守ったほうがいいと思います。
Viewをリフレッシュする(sp_refreshview)
システム切替などでテーブル定義を変更した場合は、念のため以下のコマンドですべてのviewをリフレッシュしたほうがいいです!
DECLARE @sql NVARCHAR(MAX) = '';
SELECT @sql += 'EXEC sp_refreshview '''+[name]+''''+CHAR(10) FROM sys.objects
WHERE [type] IN ('V');
SELECT @sql
ストアドプロシージャーをリフレッシュ(sp_recompile)
ストアドプロシージャーも同様に以下のコマンドですべてのストアドプロシージャーをリフレッシュできます。
DECLARE @sql NVARCHAR(MAX) = '';
SELECT @sql += 'EXEC sp_recompile '''+[name]+''''+CHAR(10) FROM sys.objects
WHERE [type] IN ('P');
SELECT @sql
EXEC (@sql);
このコマンド自体はすぐに終わるので、DB定義の変更を伴う大きな切り替えがある場合は、実行しておいて損はないと思います。
コメント