This is one instance where
a cursor[
^] is probably the best option.
DECLARE @d date = EOMonth(DateAdd(day, -1, GetDate()));
DECLARE @SNo varchar(20), @Start int, @End int;
DECLARE range_cursor CURSOR
LOCAL FORWARD_ONLY STATIC READ_ONLY
FOR SELECT SNo, [Start], [End] FROM Range_Table ORDER BY SNo;
OPEN range_cursor;
FETCH NEXT range_cursor
INTO @SNo, @Start, @End;
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC MainScript @d, @SNo, @Start, @End;
FETCH NEXT range_cursor
INTO @SNo, @Start, @End;
END;
CLOSE range_cursor;
DEALLOCATE range_cursor;