2016-07-01 4 views
0

У меня есть хранимая процедура, которая использует временную таблицу с ##temp, создавая «на лету», используя select * into ##temp from tablename.Сохраненная процедура удаления временной таблицы

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

Я использую SSRS, чтобы вытащить хранимую процедуру и использовать сверление из этого отчета в тот же отчет, сначала на котором отображаются только графики, второй отчет, который является той же самой хранимой процедурой, которая использует ссылку действий через параметр, но вторая отчет не распознает таблицу ##temp.

Теперь, когда у вас есть фон, есть ли способ обойти это или лучше сделать это, имейте в виду, что на данный момент у нас нет хранилища данных, поэтому просто используйте временные таблицы для работы ,

Благодаря

+2

Если вы хотите сохранить стол, используйте реальную таблицу, не временную. Кроме того, ваш SP будет запускаться только один раз и сбой при последующих запусках из-за уже существующей таблицы. Используйте 'INSERT INTO ... SELECT ...' вместо' SELECT ... INTO ..'. –

+1

Согласен с @ChrisPickford. Вот документы в [temp tables] (https://msdn.microsoft.com/en-us/library/ms174979.aspx). Существует раздел (примерно на полпути вниз, возглавляемый * Временные таблицы *), который детализирует, когда вы можете ожидать, что временная таблица покинет область действия и станет недоступной. –

+0

Спасибо Крис, мой босс упомянул что-то о сервере SQL, принадлежащем клиенту, чтобы не создавать таблицу, но я полагаю, что представление будет работать так же хорошо, не так ли? без таких же последствий – abs786123

ответ

1

От MSDN:

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

Если у вас есть доступ администратора к серверу, попробуйте this answer.

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