Когда в хранимой процедуре создается #Temptable в SQL Server 2005? При создании плана выполнения запроса или при выполнении хранимой процедуры?
if (@x = 1)
begin
select 1 as Text into #Temptable
end
else
begin
select 2 as Text into #Temptable
end





Он создается при выполнении и удаляется по окончании сеанса.
Интересный вопрос.
Что касается типа временной таблицы, которую вы создаете, я думаю, что это когда выполняется хранимая процедура. Таблицы, созданные с префиксом #, доступны для сеанса SQL Server, в котором они созданы. После завершения сеанса они удаляются.
Этот URL: http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx, кажется, указывает на то, что временные таблицы не создаются при создании планов выполнения запросов.
Хотя он может быть автоматически удален в конце сеанса, рекомендуется сбросить стол самостоятельно, когда вы закончите с ним.
Вы также можете рассмотреть табличные переменные, жизненный цикл которых полностью управляется за вас.
DECLARE @MyTable TABLE (MyPK INT IDENTITY, MyName VARCHAR(100))
INSERT INTO @MyTable ( MyName ) VALUES ( 'Icarus' )
INSERT INTO @MyTable ( MyName ) VALUES ( 'Daedalus' )
SELECT * FROM @MyTable
Я почти всегда использую этот подход, но у него есть недостатки. В частности, вы можете использовать только те индексы, которые вы можете объявить в конструкции TABLE (), что по сути означает, что вы ограничены только первичным ключом - без использования ALTER TABLE.