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 را به عنوان ورودی دریافت و جدول زیر را تولید کند.
تعریف تابع
تابع را به صورت زیر تعریف می کنیم.
باید دو حلقه تو در تو تعریف کنیم که حلقه اول به اندازه @number تکرار می شود.
در هر بار تکرار حلقه اول یک سطر ایجاد می شود.دستور زیر این کار راانجام می دهد.
در هر بار تکرار حلقه دوم یک عدد به دنباله اضافه می شود.دستور زیر این کار را انجام می دهد.
در این تابع متغیر @Sequence دنباله را در خود ذخیره می کند.
باید توجه داشت در پایان حلقه اول @Sequence و @sumو @count باید دوباره مقادیر اولیه خود را بگیرند.
به طور مثال عدد 5 را به عنوان ورودی دریافت و جدول زیر را تولید کند.
تعریف تابع
تابع را به صورت زیر تعریف می کنیم.
کد:
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