1) CREATE TABLE #TempTable - локальная временная таблица
Локальные временные таблицы видны только в текущем сеансе и могут быть разделены между вложенными вызовами хранимых процедур: http://www.sommarskog.se/share_data.html#temptables
2) DECLARE TABLE @TempTable - локальная переменная таблицы
Область действия локальной переменной - это пакет, хранимая процедура или блок операторов, в котором она объявлена. Они могут быть переданы как параметры между процедурами. Они не подлежат транзакциям и сохранят все строки после отката.
3) ВЫБРАТЬ * ИЗ (ВЫБРАТЬ * ИЗ ПОКУПАТЕЛЕЙ) КАК TempTable - полученная таблица
виден только текущему запросу
4) CREATE TABLE ## TempTable - глобальная временная таблица
Это отличается от таблицы #temp тем, что она видна всем процессам. Когда процесс создания заканчивается, таблица удаляется (но будет ждать, пока не будет выполнена какая-либо текущая активность других процессов).
5) CTE - общее табличное выражение
пример CTE:
;WITH YourBigCTE AS
(
big query here
)
SELECT * FROM YourTable1 WHERE ID IN (SELECT ID FROM YourBigCTE)
UNION
SELECT * FROM YourTable2 WHERE ID IN (SELECT ID FROM YourBigCTE)
может использоваться несколько раз в одной и той же команде CTE, даже рекурсивно, и будет действовать в течение всей команды CTE.