Using DECIMALs with Binet's formula you can get the first 92 in the series
WITH Constants(one,half,root5,phi,phi2,phi4,phi8,phi16,phi32,phi64) AS (
SELECT CAST(1.0 AS DECIMAL(38,20)),
CAST(0.5 AS DECIMAL(38,20)),
CAST(2.2360679774997896964091736687313 AS DECIMAL(38,20)),
CAST(1.6180339887498948482045868343656 AS DECIMAL(38,20)),
CAST(2.6180339887498948482045868343656 AS DECIMAL(38,20)),
CAST(6.8541019662496845446137605030969 AS DECIMAL(38,20)),
CAST(46.978713763747791812296323521678 AS DECIMAL(38,20)),
CAST(2206.9995468961462151779272055189 AS DECIMAL(38,20)),
CAST(4870846.9999997946968976853425802 AS DECIMAL(38,20)),
CAST(23725150497406.999999999999957851 AS DECIMAL(38,20))
)
SELECT n.Number,
CAST(CAST((CASE WHEN n.Number & 64 = 0 THEN c.one ELSE c.phi64 END *
CASE WHEN n.Number & 32 = 0 THEN c.one ELSE c.phi32 END *
CASE WHEN n.Number & 16 = 0 THEN c.one ELSE c.phi16 END *
CASE WHEN n.Number & 8 = 0 THEN c.one ELSE c.phi8 END *
CASE WHEN n.Number & 4 = 0 THEN c.one ELSE c.phi4 END *
CASE WHEN n.Number & 2 = 0 THEN c.one ELSE c.phi2 END *
CASE WHEN n.Number & 1 = 0 THEN c.one ELSE c.phi END) / c.root5 + c.half AS BIGINT) AS VARCHAR(20)) AS FibNumber
FROM master.dbo.spt_values n
CROSS JOIN Constants c
WHERE n.type='P'
AND n.Number BETWEEN 1 AND 92;
____________________________________________________
Deja View - The strange feeling that somewhere, sometime you've optimised this query before
How to get the best help on a forum
http://www.sqlservercentral.com/articles/Best+Practices/61537