This has been done many times before by many other people, but I set this challenge to a friend of mine who was interested in programming, and then realised that I had no solution. So I spent the train journey home writing my effort below. Like a lot of things in computer programming, there’s more than one correct way, but many more incorrect ways! I like this way because it’s quite small and readable.

DECLARE @COUNT TINYINT = 1
DECLARE @FizzBuzz VARCHAR(8)

WHILE @COUNT < 101
BEGIN
SELECT @FizzBuzz = CASE
WHEN @COUNT % 3 = 0
AND @COUNT % 5 = 0
THEN 'FizzBuzz'
WHEN @COUNT % 3 = 0
THEN 'Fizz'
WHEN @COUNT % 5 = 0
THEN 'Buzz'
ELSE CAST(@Count AS VARCHAR(3))
END

PRINT @FizzBuzz

SELECT @COUNT = @COUNT + 1
END