Create an incremental number with year and month without updating the entire table using a trigger
Schematically (no syntax):

CREATE TRIGGER UpdateThingsNumberTrigger 
ON Things
AFTER INSERT
AS
WITH cte AS ( SELECT LEFT(Number, 8) yyyymm, CAST(RIGHT(MAX(Number),4) AS INT) nnnn
              FROM Things 
              GROUP BY LEFT(Number, 8)
            )
UPDATE Things
LEFT JOIN cte ON cte.yyyymm = YEAR(CreationDate) 
                            + '.' 
                            + MONTH(CreationDate) 
                            + '.'
SET Number = YEAR(CreationDate) 
           + '.' 
           + MONTH(CreationDate) 
           + '.' 
           + RIGHT('0000' + CAST((  COALESCE(nnnn, 0) 
                                  + ROW_NUMBER() OVER (GROUP BY YEAR(CreationDate) 
                                                              + '.' 
                                                              + MONTH(CreationDate) 
                                                              + '.' 
                                                       ORDER BY CreationDate) AS CHAR), 4)
WHERE Number IS NULL


Logic:


We update the whole table, but only those records which have no value in Number field (WHERE Number IS NULL).
In cte we obtain maximal current number for each year-month in the table divided to prefix (yyyymm) and number within group (nnnn).
For each group of records to be updated (1) we calculate new number part - we enumerate those records and add this number to nnnn part, then format in with leading zeros. If it is new year-month, no nnnn for it, and we set it to 0, so we start number part from 1.


PS. It is possible when the last record in the group by year-month was deleted - in such case deleted Number value will be re-assigned. I do not see the way to determine does this value existed previously and it was deleted, or it was not existed.