I encountered exactly this same problem just now. I have 2 possible solutions, both of which can work, and which to use probably depends largely on what the inner loop does.
In both cases, prefix the inner loop with an 'Add Empty Rows' node, where you can specify that the table must have at least one row. You need to ensure that the node puts something into each column type, for either solution.
Solution 1:
Put something into the empty table (such that all column types contain a value, otherwise the tablerow to variable loop start will fail with missing values), such that the inner loop will still run, and then suffix the inner loop with a row filter to remove this 'blank' iteration
Solution 2 (if solution 1 does not work in your situation):
Put something into the empty table such that all column types contain a value. Make the String values something obvious like 'NoData'. Take the output into a 'TableRow to variable' node, and the output of this to a Java Edit Variable node configured to generate a new variable called 'port', something like (where 'Col0' is the name of a string column in your table):
return ($${Col0}$$.equals("NoData"))?"bottom":"top";
Now, put the output of your 'Add Empty Rows' node into an If Switch node, and connect the edit variable output to the flow variable input at the top left of the If Switch. Configure the If Switch such that the port is controlled by your flow variable, called 'port', and connect your inner loop to the top outport of the If switch. Connect the bottom port to a row filter, configured to remove the 'NoData' rows from the table, and connect both to an End If node. Hopefully the attached image also helps!
Note - you will not be able to configure nodes int he inactive branch, marked with the red corsses on the outports. To fix this, at setup, configure the If Switch to 'both' manually, configure the rest of the nodes, and then configure the If Switch to use the flow variable!
Steve