--Now scalable, set based and added a fizzbuzz!
DECLARE @threshold int = 100
;WITH numbers ( seqnum )
AS ( SELECT 1 AS seqnum
SELECT seqnum + 1 AS seqnum
WHERE seqnum < @threshold
Recursive CTEs are questionably set-based (will leave it to you to figure out why) and slower than many other methods of row generation.
I agree with Gail. Recursive CTEs that "count" or process individual rows are a form of "Hidden RBAR" that can be much worse than a well written While Loop. Of course, for the production of regular numeric sequences, both should be avoided. Please see the following article for more information and performance comparisions of 3 other methods that absolutely blow Recursive CTE number generators out of the water even for relatively small numbers of rows.
As Gail also suggested, Recursive CTEs do have some good uses and shouldn't be avoided "just because". As with all else in SQL Server, "It Depends".
is pronounced "ree-bar
" and is a "Modenism
" for R
First step towards the paradigm shift of writing Set Based code:
________Stop thinking about what you want to do to a row... think, instead, of what you want to do to a column.
"If you think its expensive to hire a professional to do the job, wait until you hire an amateur."--Red Adair
"Change is inevitable... change for the better is not."
When you put the right degree of spin on it, the number 3|8
is also a glyph that describes the nature of a DBAs job. 😉
How to post code problems
Create a Tally Function (fnTally)