View or Temporary Table - which to use in MS SQL Server?

If the query is "long" and you are accessing the results from multiple queries, then a temporary table is the better choice.

A view, in general, is just a short-cut for a select statement. If does not imply that the results are ever run and processed. If you use a view, the results will need to be regenerated each time it is used. Although subsequent runs of the view may be more efficient (say because the pages used by the view query are in cache), a temporary table actually stores the results.

In SQL Server, you can also use table variables (declare @t table . . .).

Using a temporary table (or table variable) within a single stored procedure would seem to have few implications in terms of security, simplicity, and column names. Security would be handled by access to the stored procedure. Column names are needed for either solution. Simplicity is hard to judge without more information, but nothing sticks out as being particularly complicated.


I'd like to also mention that for temporary table,

You cannot refer to a TEMPORARY table more than once in the same query.

This make temp table inconvenient for the cases where you want to use self join on it.


depends

A view must replicate the processing of your "long query" each time it is run, while a temp table stores the results.

so do you want to use more processing or more storage?

You can store some view values (persistent index) which could help on processing, but you don't provide enough info to really explore this.

If you are talking about just storing the data for the use within a single procedure call, then a temp table is the way to go.