DECLARE RM_CURSOR CURSOR FOR
SELECT D.id,D.PeriodDesc,D.StartDate,D.EndDate
FROM #DateRanges D
ORDER BY D.id
OPEN RM_CURSOR
FETCH NEXT FROM RM_CURSOR INTO @id,@PeriodDesc,@StartDate,@EndDate
WHILE @@FETCH_STATUS = 0
BEGIN
Your looping logic is based on Cursor fetch status. Declare a CounterVariable & get the number of the rows for your cursor query. Compare this CounterVariable in your loop & your are good to remove cursor.