در قسمت چهاردهم آموزش SQL Server ،دستورات Case در برنامه SQL را به شما آموزش دادیم. دراین قسمت قصد داریم توابع (Functions) در SQL Server را به شما آموزش بدیم.
در این قسمت میخواهیم با توابع کار کنیم که یکی دیگر از امکاناتی هست که SQL در اختیار ما قرار داده ما در کل دو نوع تابع متفاوت در SQL داریم که حال میخواهیم با نوع SCALAR ان کار کنیم برای اینکار نیز مانند اموزش های قبل با رفتن به قسمت New Query و انتخاب بانکی که میخواهیم دستوراتمان به روی ان اعمال شود تابعی میسازیم.
شکل کلی تابع به صورت زیر میاشد
CREATE FUNCTION Function_Name(Parametrs) RETURN Output_Type AS BEGIN COMMANDS… RETURN Output END>
حال میخواهیم تابعی ساده بنویسیم.به مثال زیر توجه کنید :
Create Function SumAmanat(@Code int) Returns int AS Begin Declare @Result int=( Select COUNT(*) From Tbl_Amanat Where Tbl_Amanat.Code_Ketab=@Code ) Return @Result End
در مثال بالا ما تابعی با نام SumAmanat با کلمات کلیدی Create Function ساخته ایم که برای ان پارامتری نیز در نظر گرفته ایم متغیری با نام @Code از نوع int در خط دوم نیز با کلمه کلیدی Return نوع خرئجی تابع را مشخص کرده ایم و سپس کلمات کلیدی As و Begin و حال دستورات را مینویسیم که در اینجا ما متغیری با نام @Result از نوع int که محتوی ان یک کوری میباشد که تعداد همه چیز را در جدول امانت مشخص میکند جایی که فیلد کد کتاب در این جدول برابر پارامتر ورودی تابع باشد و سپس هم متغیر را به عنوان مقدار بازگشتی تابع با کلمه Return برمیگرداند و در اخر هم بدنه تابع را با کلمه End میبندیم
پس از اجرای این دستورات عبارت Command(s) completed successfully را خواهید دید بدن معنی که این تابع ساخته شده و در مسیر Library/Programmability/Functions/Scalar-valued Functions ذخیره شده.
حال برای دیدن نتیجه این تابع دستورات زیر را میتوان نوشت
همانگونه که در تصویر فوق مشاهده میکنید ما دستورات Go و سپس یک کوری ساده که دو مقدار را به ما نمایش میدهد را نوشتیم که یکی از انها نام کتاب Name_Ketab و دیگری dbo.SumAmanat که همان تابعی است که در بالا نوشتیم و به این نکته توجه داشته باشید که *زمان استفاده از UDF ها یا همان User Define Function ها که خودتان ساخته اید باید برای قید کردن نام تابع از عبارت dbo. قبل ان استفاده کرد و با گزاشتن کاراکتر . نام توابعی که ساخته اید را مشاهده خواهید کرد* و میتوانید یکی را انتخاب کنید و پارامتر ورودی به ان دهید که در اینجا ما از فیلد Code_Ketab در جدول کتاب به عنوان پارامتر استفاده کرده ایم پس از هایلایت کردن و کلیک کردن دکمه Execute نتیجه فوق را مشاهده میکنید.
حال میخواهیم از نوع دیگر تابع با نام Multi Statement Function ها اسنا شویم که تفاوتی که با Scalar Function ها یا همان UDF ها که قبلا گفتیم دارند این است که میتوانند چندین پارامتر ورودی داشته باشند و در نهایت میتوانند مقادیر خروجی بیش از یکی هم داشته باشند مثلا یک جدول را برگردانند.
برای اشنایی بیشتر با این نوع توابع به مثال زیر توجه کنید
Create Function CalcRange(@min int, @max int) Returns Table AS Return ( Select Code_Ketab From Tbl_Amanat Where ID Between @min And @max ) Go Create Function CalcRent(@min int,@max int) Returns Table As Return ( Select Name_Ketab,Sum(Tbl_Ketab.tedad* Tbl_Ketab.Qeymat) As Total From Tbl_Amanat,Tbl_Ketab Where Tbl_Amanat.Code_Ketab=Tbl_Ketab.Code_Ketab And Tbl_Amanat.ID in ( Select * From dbo.CalcRange(@min,@max) ) Group By Name_Ketab,Tbl_Amanat.Code_Ketab (
در شبه کد فوق ما ابتدا تابعی با نام CalcRange(@min int, @max int) را با دو پارامتر ساخته ایم که طبق گفته های قبل بدنه و خروجی و… انرا تعیین کرده و کوری به عنوان نتیجه تابع ذکر کرده ایم که نتیجه ان رکوردهاییست که ای دی انها بین دو پارامتر ورودی @min و @max قرار دارد که به صورت جدول نیز میباشد همانگونه که مشاهده میکنید نوع خروجی از نوع Table گفته شده.
تابع دوم نیز دارای پارامترهای یکسان با تابع قبل است و خروجی ان نیز از نوع جدول و نتیجه کوری که میخواهد به عنوان خروجی رد کند نیز در اموزش های قبل توضیح داده شده در واقع این کوری میگوید نام و جمع حاصل ضرب فیلد های تعداد و قیمت را از جداول امانت و کتاب انتخاب کن اگر شرایط زیر را داشته باشند که این شرایط نیز شامل یکی شرط جوین شدن دو جدول میباشد که در اموزش های قبل بسیار توضیح داده شده و دیگری میگوید اگر فیلد ای دی در جدول امانت جز نتیجه تابع قبل بود Select را انجام بده به عبارت دیگر رکورد هایی برای این تابع اتخاب شوند که ای دی انها جز خروجی تابع بالا باشند. و در اخر نیز Group By را انجام داده ایم که نتیجه براساس فیلدهای ذکر شده نمایش داده شود.