Tempdb tables, table in database or even cte for usp for reporting
If your data needs to be persistent over a failure &amp; restart then a "real" table in your database would be best.  You need a mechanism to isolate one user's execution of this from another's and to tidy up nicely.

If data is to be disposed of if the SP crashes and will be re-created on a restart then a table-valued variable would be adequate.  These are not indexed, however.  If the data will be re-read according to different predicates this may be a problem.

Temporary tables e.g. create table #abc... will keep one user's data isolated from another users'.  The tables will be tidied away at the end of the SP.  Indexes and statistics are held for #Tables so these perform better for larger row counts or multiple access paths.