2014-01-09 3 views
1

В начале пакета ETL следующее SQL запрос выполняется против SQL Server 2012 базы данных:Почему глобальная таблица temp, созданная пакетом SSIS, исчезает после завершения?

IF OBJECT_ID(N'tempdb..##SlotChanges') IS NOT NULL 
BEGIN 
DROP TABLE ##SlotChanges 
END 

CREATE TABLE ##SlotChanges 
(
    --Snip 
) 

Пакет затем записывает несколько строк в временную таблицу и использует его в качестве конечного источника данных при записи в пункт назначения база данных.

В конце нет команды drop, так как она будет проверяться только в начале следующего запуска, но если я затем открою SSMS и запустим выделение против таблицы, она вернет исключение недействительного объекта. Я могу запросить таблицу через SSMS просто отлично, пока пакет запущен, но как только он заканчивается, таблица исчезла.

Я понимаю, что глобальная таблица темпов должна сохраняться, даже если сессия пакета потеряна. Мне интересно, знает ли кто-нибудь, что приводит к тому, что временная таблица падает или выходит из области после завершения пакета.

+3

у вас есть [неправильное понимание ] (http://technet.microsoft.com/en-us/library/ms186986 (v = sql.105) .aspx). «Глобальные временные таблицы видны любому пользователю и любому соединению после их создания и удаляются, когда все пользователи, которые ссылаются на таблицу, отключаются от экземпляра SQL Server». – billinkc

ответ

2

ваш understaing является немного неправильно. Глобальная таблица Temp получает падение при последнем сеансе, используя его compelets.

Глобальные временные таблицы автоматически удаляются, когда сеанс, который создал таблицу, заканчивается, и все остальные задачи перестали ссылаться на них. Связь между задачей и таблицей поддерживается только для жизни одного оператора Transact-SQL . Это означает, что глобальная временная таблица удаляется при завершении последнего оператора Transact-SQL, активно ссылающегося на таблицу, когда создание сессия закончилась. "

chekc в MSDN Create Table

Смежные вопросы