وقتی تلویزیون تماشا می کنید ،عموماً اشخاص را در حال انجام فعالیت های گوناگون مشاهده می کنید ،اما آیا هیچ یک از این اشخاص واقعاً درون دستگاه تلویزیون شما هستند ؟ شاید وقتی جوان تر بودید چنین تصوری داشته اید ، اما اینک می دانید که آن اشخاص هزاران مایل دور تر از شما در یک استودیو هستند . شما در واقع اشخاص را می بینید که آنجا نیستند ،بلکه نمایی از آنها را می بینید .
عملکرد ویوها نیز شباهت زیادی به مثال پیش گفته دارد . ویوها در حقیقت نمایی از داده های ذخیره شده هستند ؛ درست همان گونه که تصاویر صفحه تلویزیون نشان دهنده نمایی از اشخاصی هستند که واقعاً در استودیویی دورتر از شما قرار دارند . البته مزایای ویوها بسیار بیشتر از نگاه کردن به داده هایی است که در یک جدول ذخیره شده اند :
● برخی از جداول ممکن است بسیار بزرگ شوند و احتمالاً تعداد رکورد های آنها به صدها هزار برسد هر ویو برای باز گرداندن زیر مجموعه کوچکی از داده های یک جدول ایده آل است .چرا که به ندرت نیاز به دیدن تمام داده ها خواهید داشت .
● کاربران اغلب نیاز به دیدن داده های چند جدول دارند . ویو ها به کاربران امکان می دهند تا تمام داده های مورد نیازشان را به طور یکجا ببینند ،کاربران می توانند داده ها را از طریق یک ویو تغییر دهند .
بهبود کارایی ویو ها با توابعی که توسط کاربر تعریف می شوند
توابعی که توسط کاربر تعریف می شوند ،از این جهت که مجموعه نتایجی را بر می گردانند ،کارکردشان شباهت زیادی به ویو ها دارند . زیبایی این توابع در آن است که بر خلاف ویو ها ، پارامتر هایی را می توان به آنها ارسال نمود . به عنوان مثال ،ویوی v contacts in 398 , فهرست تمام مشتریانی را بر می گرداند که کد تلفن آنها 398 است . اگر بخواهید فهرست مشتریان نواحی دیگر را ببینید ،می توانید ویوی جداگانه ای برای هر یک از نواحی بنویسید . یک روش بهتر ،ایجاد تابعی است که بتواند کد های تلفن را بپذیرد .
برای آنکه انعطاف پذیری این توابع نشان دهیم ،تابعی ایجاد می کنیم که کد های تلفن را دریافت می کند :
پنجره پرس و جو ها را در management studio باز کنید و بانک اطلاعاتی adventure works را از فهرست available database انتخاب کنید.
- فرامین زیر را برای ایجاد تابعی اجرا کنید که مشتریان هر ناحیه ای نمایش می دهد:
CEATE FUNCTION UfunctionArea (@ Area char)(3) RETUURNE TABLE AS RETURN ( SELECT Title AS [Title], Last Name AS [last name], First Name AS [First Name], Phone AS [Phone Number], Sales.Indivisual .Demographics As [Demographics xml data], Sales.crediteard.cardType AS [card type] FROM Person. Contact JOIN Sales. Individual on Person. Contact. Contact ID= Sales.Contactcreditcard on JOIN Sales.contactcreditcard.contactID= Salescreditcard.creditcardID WHERE Phone LIKE @ Area+'%
- برای آزمایش این تابع ،پرس و جوی زیر را اجرا کنید :
SELECT* FROM ufunction Area ('208')
کد تلفن 208را برای تابع ارسال کرده ایم ،اما هر کد معتبر دیگری را می توانید با استفاده از این تابع ساده آزمایش کنید.
ثبت نظر