A way for doing that instead of using cursors, is by selecting the data in the specified range and by using the DATEADD
function to add a month for each record of the result set which you want to be inserted as new records
Code sample for what you asks for (I haven't tested it)
INSERT INTO GSTProdSchedule
(GSTArea_ID, GSTShift_ID, HourNumber, ShiftStartDate, HourStartTime, ShiftEndTime)
select GSTArea_ID, GSTShift_ID, HourNumber,
DATEADD(m, 1, ShiftStartDate),
DATEADD(m, 1, HourStartTime),
DATEADD(m, 1, ShiftEndTime)
from GSTProdSchedule
where ShiftStartDate between '03/01/2014' and '04/01/2014'
I'm not a fan of cursor and I don't like to use unless I have to. Hope that works as you like
Update: I'm assuming that you are using MS SQL-Server.