Generating the Fibonnaci series generally involves in writing the code which has while loop or a recursive function
Peso posted the code using the Common table expression
Here are my methods that involve no loop or no recursion
1 Use Quirky update technique
declare
@fib table(fib_id bigint,fib_val bigint)
declare
@current_val bigint, @previous_val bigint,@new_val bigint
--Set how many rows you want to generate the series
insert
into @fib(fib_id,fib_val )
select
top 30 row_number() over(order by name),1 from sysobjects select @current_val =0, @previous_val=-1,@new_val =1
update
@fib
set
fib_val =@current_val,
@current_val =@new_val +@previous_val,
@previous_val=@new_val,
@new_val=@current_val
select * from @fib
2 Use Generalised formula
Method 1
select
ceiling((power(1.61803398874989,number )-POWER(-1/1.61803398874989,number))/SQRT(5)) as fib_number
from
master..spt_values
where
TYPE='p' and number between 0 and 100
Method 2
select
round(((power((1+SQRT(5))/2.0,number )-POWER(-1/(1+SQRT(5))/2.0,number))/SQRT(5)),0) as fib_number
from
master..spt_values
where
TYPE='p' and number between 0 and 100
Method 3 (shortest method)
select
floor(power((1+SQRT(5))/2.0,number )/sqrt(5)+0.5) as fib_number
from
master..spt_values
where
TYPE='p' and number between 0 and 100