Если в ответе Гордона правильная идея, гораздо лучше было бы не использовать какой-либо тип рекурсии. SQL Сервер разработан для методов, основанных на множествах, и поэтому вам действительно следует использовать один из них.
Здесь вам нужен метод Tally, который не является рекурсивным и не ограничен 100 циклами по умолчанию (как rCTE), потому что не l oop:
DECLARE @FromDate date = '20180102';
WITH N AS(
SELECT N
FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
SELECT TOP (DATEDIFF(DAY,@FromDate, GETDATE())+1)
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
FROM N N1, N N2, N N3), --1000 rows, add more cross joins to N for more rows
Dates AS(
SELECT DATEADD(DAY, T.I, @FromDate) AS D
FROM Tally T)
INSERT INTO dbo.Tmp_M_Rates (Rate_Date, Rate_D, Entity, cur)
SELECT D,
SUBSTRING(CONVERT(VARCHAR(10), @Fromdate, 112), 3, 8),
@EntityName,
@Cur
FROM Dates;