يكي ديگر از معايب كوئريهاي select * در SQL server اين است كه تغييرات حاصل در فيلدهاي جداول يك بانك اطلاعاتي را در view هاي ساخته شده از اين نوع كوئريها منعكس نميكند.
براي مثال جدول tblTreeItems را با سه فيلد id ، parent و title در نظر بگيريد. فرض كنيد بر اين اساس view زير را ساختهايم:
CREATE VIEW GetData
as
SELECT * FROM tblTreeItems
بايد در نظر داشت كه هنگام ايجاد يك view ، تصويري از تمامي فيلدهاي مورد استفاده در آن زمان، جهت بالابردن كارآيي كوئري و عدم محاسبه مجدد فيلدها در جداول سيستمي ذخيره ميگردد ( * با نام فيلدهاي همان زمان ايجاد (نه زمان فعلي)، جايگزين خواهد شد). اين تصوير ايستا است و با تغيير فيلدهاي يك جدول به روز نخواهد شد.
براي به روز كردن view ها و stored procedures پس از تغييرات ساختاري در جداول، بايد مجددا آنها را كامپايل كرد. براي اين منظور راههاي زيادي وجود دارد، براي مثال drop كردن يك view و ايجاد مجدد آن. يا باز كردن آن view در management studio (حالت alter query) و سپس فشردن دكمه F5 جهت اجراي مجدد كوئري كه اينبار بر اساس اطلاعات جديد به روز خواهد شد. يا استفاده از رويههاي سيستمي sp_refreshview و sp_recompile كه براي كامپايل مجدد view ها و رويههاي ذخيره شده بكار ميروند.
براي مديريت سادهتر اين موارد ، اسكريپت زير تمامي view ها و رويههاي ذخيره شده يك ديتابيس را به صورت خودكار يافته و آنها را مجددا كامپايل ميكند: (جهت مشاهده آن نياز به ثبت نام دارد و رايگان است)
Refreshing Views and Recompiling Stored Procs