I am right in thinking it's not possible to pass a table variable as a parameter in a sp_executesql statement in the way an int can be passed as a parameter?
No, you can't pass a table variable. But you can create a temp table in one procedure, populate it with data, and call a second procedure that can reference that temp table and do more work on it.