Вопрос

Когда в хранимой процедуре создается #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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top