۱۳۸۷/۰۹/۱۱

منسوخ شده‌ها در نگارش‌هاي جديد SQL server


با تكامل SQL server و بهبودهاي حاصل شده، يك سري از ويژگي‌هاي موجود صرفا جهت حفظ سازگاري با نگارش‌هاي قبلي ارائه مي‌شوند. ليست كامل آنها را در آدرس زير مي‌توان مشاهده نمود:

Deprecated Database Engine Features in SQL Server 2008

ليست بلند بالايي است. اما در يك محيط كاري، نوع‌هاي زير از ساير موارد ذكر شده بيشتر مورد استفاده قرار مي‌گيرند:
منسوخ شده‌ها: text ، ntext و image . جايگزين‌ها : varchar ، nvarchar و varbinary از نوع max دار

عموما علت استفاده از نوع‌هاي text يا ntext (نمونه يونيكد text) ، مشخص نبودن تعداد كاراكتري است كه كاربر قرار است وارد كند. براي مثال يك سايت خبري ايجاد كرده‌ايد و طول محتواي خبر ثبت شده در بانك اطلاعاتي از يك خبر به خبر ديگر كاملا متفاوت است. در اينجا براي حل اين مشكل از نوع‌هاي text يا ntext استفاده مي‌شد (اين مورد تا اس‌كيوال سرور 2000 توصيه مي‌شود).
varchar max تا 2,147,483,648 كاراكتر را مي‌تواند ذخيره كند، يعني تا 2 GB و nvarchar max تا نصف اين مقدار را. در اس كيوال سرور 2000 محدوديت 8000 كاراكتر براي نوع vrachar وجود داشت (و نوع nvrachar تا 4000 كاراكتر).

مزاياي استفاده از نوع‌هاي max دار (از اس كيوال سرور 2005 به بعد) :
  • بهبود كارآيي كوئري‌هاي جستجو نسبت به نوع‌هاي Text‌
  • اگر مطلب تشخيص كمبود ايندكس‌ها را دنبال كرده باشيد، در آنجا ذكر شد كه در قسمت included columns نمي‌توان از text و ntext‌ استفاده كرد اما نوع‌هاي max دار متني مجازند.
  • امكان استفاده از فيلدهاي max دار براي مرتب سازي كوئري مجاز است. (به شخصه با اين مورد زياد برخورد داشتم. براي مثال امكان سورت كردن يك گريد را در ASP.Net فراهم كرده‌ايد و كاربر با كليك بر روي سر ستون فيلدي از نوع ntext با يك خطا متوقف خواهد شد)
  • امكان استفاده از نوع‌هاي Text به‌عنوان متغير در رويه‌هاي ذخيره شده يا توابع T-SQL مهيا نيست اما اين محدوديت در نوع‌هاي max دار برطرف شده است.
  • نوع‌هاي text را در توابع REPLACE ، CHARINDEX و SUBSTRINGنمي‌توان بكار برد (برخلاف نوع‌هاي متني max دار).
بعد از اين توضيحات شايد علاقمند شده باشيد كه نوع‌هاي فيلدهاي قديمي را به نوع‌هاي جديد تبديل كنيد (مراجعه به management studio ، تغيير نوع فيلد و كليك بر روي دكمه ذخيره در نوار ابزار آن). اگر تعداد ركوردها بالا باشد، بدون شك با خطاي زير متوقف خواهيد شد:

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

براي حل اين مشكل مي‌توان مقدار پيش فرض timeout را مطابق تصوير زير تغيير داد (منوي tools گزينه options) :



بعد از اين تغيير به سادگي مي‌توان عمليات ارتقاء را بدون نگراني از بروز خطاي فوق انجام داد.