انجمن وب سایت مشاوره در زمینه پروژه های برنامه نویسی و طراحی وب سایتهای تجاری

نسخه‌ی کامل: مثالی جالب از تعریف تابع یا Function در SQL Server
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
می خواهیم تابعی تعریف کنیم که عدد طبیعی 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
لینک مرجع