I thought this looked a good candidate for CROSS APPLY:
insert into dbo.def
(
SeqNo,
Date_Field,
Payment
)
SELECT A.Seqno,
X.Date_Field,
A.Payment
FROM dbo.abc A
CROSS APPLY (SELECT DATEADD(mm, T.N, A.Date_field) Date_Field
FROM dbo.Tally T
WHERE T.N BETWEEN 0
AND A.Month_Count - 1) AS X
I have found that the performance of recursive CTEs degrades a lot as the number of rows increase.