انجمن وب سایت مشاوره در زمینه پروژه های برنامه نویسی و طراحی وب سایتهای تجاری
مثالی جالب از تعریف تابع یا Function در SQL Server - نسخه‌ی قابل چاپ

+- انجمن وب سایت مشاوره در زمینه پروژه های برنامه نویسی و طراحی وب سایتهای تجاری (http://forum.a00b.com)
+-- انجمن: سوالها و مقاله های آموزشی (/forumdisplay.php?fid=1)
+--- انجمن: مقاله های آموزشی (/forumdisplay.php?fid=3)
+--- موضوع: مثالی جالب از تعریف تابع یا Function در SQL Server (/showthread.php?tid=36)



مثالی جالب از تعریف تابع یا Function در SQL Server - ali - 01-04-2016 08:48 PM

می خواهیم تابعی تعریف کنیم که عدد طبیعی n را از ورودی بگیرد و یک جدول با دو فیلد به نام های sum و sequence به عنوان خروجی تولید کند. با این شرط که n سطر ایجاد کند و برای فیلد sequence در سطر اول عبارت =1، در سطر دوم=1+2 ،..... و در سطر nام =1+2+...+n را قرار دهد. در فیلد sum نیز مجموع اعداد متناظر فیلد sequence را نشان دهد. یعنی در سطر اول 1، در سطر دوم 3، ...و در سطر nام جمع 1 تا n را قرار دهد.
به طور مثال عدد 5 را به عنوان ورودی دریافت و جدول زیر را تولید کند.


[تصویر:  6358757490097501550A00b_com.JPG]

تعریف تابع
تابع را به صورت زیر تعریف می کنیم.

کد:
CREATE function [dbo].[UDFSequence](@number int)
returns @tblSequnce table (
            [SUM] int,
            sequnce nvarchar(max))

as
begin
declare @Counter int
declare @count int
declare @Sequence nvarchar(max)
set @String=''
declare @sum int
set @Counter=1
set @count=1
set @sum=0
        while(@Counter<=@number)
          begin
            while(@count<=@counter)
              begin
                set @sum=@sum+@count
                 if(@count=1)
                   begin
                      set @Sequence='1'
                   end
                 else
                    begin
                        
     set   @Sequence=@Sequence+'+'+convert(nvarchar(10),@count)
                        
                     end
                   set @count=@count+1
                              
                     end
                          
            set @Sequence='='+@Sequence
                
            insert into @tblSequnce
                select @sum,@Sequence

                set @Counter=@Counter+1
                set @count=1
                set @Sequence=''
                set @sum=0
            end

                    return
end

باید دو حلقه تو در تو تعریف کنیم که حلقه اول به اندازه @number تکرار می شود.
در هر بار تکرار حلقه اول یک سطر ایجاد می شود.دستور زیر این کار راانجام می دهد.


کد:
insert into @tblSequnce
select @sum,@Sequence

در هر بار تکرار حلقه دوم یک عدد به دنباله اضافه می شود.دستور زیر این کار را انجام می دهد.

کد:
@Sequence = @Sequence + '+' + convert(nvarchar(10),@count)

در این تابع متغیر @Sequence دنباله را در خود ذخیره می کند.

باید توجه داشت در پایان حلقه اول @Sequence و @sumو @count باید دوباره مقادیر اولیه خود را بگیرند.

کد:
set @count=1
set @Sequence=''
set @sum=0