اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
متن زیر یک سری نکات و یا شاید توهماتی را مطرح میکند که در مورد رویههای ذخیره شده در اس کیوال سرور رایج هستند.
1- رویههای ذخیره شده در مقابل SQL Injection مقاوم هستند. کوئریهای Ad hoc همیشه این آسیب پذیری را به همراه دارند.
نادرست است! رویههای ذخیره شدهای که رشتهها را به صورت پارامتر دریافت کرده و آنها را به صورت یک عبارت sql اجرا میکنند، آسیب پذیر هستند. اگر هنگام استفاده از کوئریهای Ad hoc از پارامترها استفاده شود، در برابر حملات SQL Injection مصون خواهید بود.
2- execution plan رویههای ذخیره شده کش میشوند اما این Plan برای کوئریهای Ad hoc هر بار محاسبه و تولید میگردد.
نادرست است! اس کیوال سرور تا این اندازه بی هوش نیست! اگر execution plan ایی موجود باشد حتما استفاده خواهد شد و برای موتور اس کیوال سرور اصلا اهمیتی ندارد که کوئری در حال اجرا از یک رویه ذخیره شده صادر شده است یا از یک کوئری Ad hoc . رویههای ذخیره شده پیش کامپایل شده نیستند و مانند تمامی کوئریهای دیگر در زمان اجرا کامپایل میشوند.
3- زمانیکه از رویه ذخیره شده استفاده میکنید همه چیز را در یک مکان به صورت متمرکز و مجتمع خواهید داشت (مدیریت بهتر)
نادرست است! در یک مکان متمرکز در اختیار شما نیستند. برنامه جای خود را دارد و رویههای ذخیره شده در دیتابیس در جای دیگری قرار دارند و برای مثال اگر قرار باشد یک پارامتر را به رویه ذخیره شده خود اضافه کنید، کدهای شما نیز باید تغییر کنند.
4- میتوان از یک رویه ذخیره شده استفاده مجدد کرد (در نقاط مختلف یک کد) و اعمال تغییرات تنها در یک مکان (دیتابیس) باید صورت گیرد.
هر چند این مورد درست است، اما باید دقت داشت که اگر چندین برنامه از این رویه ذخیره شده استفاده میکنند نباید تغییرات شما باعث از کار افتادن سایر برنامهها شوند.
5- میتوان رویه ذخیره شده را بدون نیاز به توزیع مجدد برنامه تغییر داد.
این مورد تا حدودی صحیح است. اگر تنها بحث بهینه سازی و امثال آن مطرح باشد صحیح است اما اگر واقعا نیاز به تغییر یک کوئری در رویه ذخیره شده وجود داشته باشد به احتمال زیاد برنامه نیز باید دستخوش تغییراتی گردد تا این دو با هم هماهنگ شوند.
نظر شما چیست؟