# sql query to insert the fibonacci sequence into a table

I need an insert statement to insert the fibonacci sequence into a table. Lets think for a moment that the table has two fields

fibid - is an integer, identity field
fibnum is where the fibonacci sequence should go.

so it will be something like this

fibid(1,2,3,4,5)
fibnum(1,2,3,5,8)

etc

lets say populate 200 records

thanks,
Vinnie
###### Who is Participating?

x

Data EngineerCommented:
check this.
``````;WITH Fibonacci(n, f, f1)
AS (
-- This is the anchor part
-- Initialize level to 1 and set the first two values as per definition
SELECT  CAST(1 AS BIGINT),
CAST(0 AS BIGINT),
CAST(1 AS BIGINT)

UNION ALL

-- This is the recursive part
-- Calculate the next Fibonacci value using the previous two values
-- Shift column (place) for the sum in order to accomodate the previous
-- value too because next iteration need them both
SELECT  n + 1,
f + f1,
f
FROM    Fibonacci
-- Stop at iteration 93 because we than have reached maximum limit
-- for BIGINT in Microsoft SQL Server
WHERE   n < 93
)
-- Now the easy presentation part
SELECT  n,
f AS Number
FROM    Fibonacci
``````
0

There are many ways to solve this problem, with different performances.....

But for a novice and easy to understand the below is the best approach

step 2 : create a loop
Step 3 : caliculate the current fibonacci number
step 4: Store it in the table

``````DECLARE @T TABLE
(
fbid BIGINT IDENTITY(1,1)
,Fib BIGINT
)

DECLARE @FibonacciCurrent BIGINT
DECLARE @FibonacciPast BIGINT
DECLARE @Temp BIGINT
DECLARE @Counter BIGINT
SET @FibonacciCurrent = 1
SET @FibonacciPast = 1
WHILE (@Counter < 200)
BEGIN
INSERT INTO @t (fib)
SELECT @FibonacciCurrent

SET @temp = @FibonacciCurrent
SET @FibonacciCurrent = @FibonacciCurrent + @FibonacciPast
SET @FibonacciPast = @temp

SET @Counter = @counter + 1
END

SELECT * FROM @T
``````
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.