Организация пула подключений (с любой современной версией SQL Server) будет звонить sp_reset_connection
при многократном использовании соединения. Это сохранило proc, среди прочего, отбрасывания любые временные таблицы , которым владеет соединение.
## таблица будет совместно использована всеми пользователями. Я предполагаю, что это не Ваше намерение.
А single-# временная таблица видим ко всем хранимым процедурам вниз стек вызовов, но не видим вне того объема. Если у Вас может быть Proc вызов B, C, и D, необходимо быть в порядке.
Редактирование: процедура отчетности я должен продолжать работать прямо сейчас, много похожа на это.:) Я составляю временную таблицу (#results) в корне proc, это называет приложение, затем сделайте некоторое сложное искажение данных в ряду дочерних процедур к 1) краткому обзору повторенный код и 2) помешать корневой процедуре работать к 500 + строки.
Для совместного использования временной таблицы между пользователями используют два хеша перед именем ##like_this.
В этом случае, хотя удостоверяются, что Вы предпринимаете шаги для предотвращения столкновений с несколькими экземплярами программы.
Из документов MS:
http://msdn.microsoft.com/en-us/library/ms177399 (SQL.90) временные таблицы .aspx
Временные таблицы подобны постоянным таблицам, кроме временных таблиц хранятся в tempdb и удалены автоматически, когда они больше не используются.
существует два типа временных таблиц: локальный и глобальный. Они отличаются друг от друга по своим именам, своей видимости и своей доступности. Локальные временные таблицы имеют единственный знак номера (#) как первый символ их имен; они видимы только к текущему соединению для пользователя, и они удалены, когда пользователь разъединяется от экземпляра SQL Server.
Глобальные временные таблицы имеют два знака номера (##) как первые символы их имен; они видимы любому пользователю после того, как они создаются, и они удалены, когда все пользователи, ссылающиеся на таблицу, разъединяются от экземпляра SQL Server.
, Например, при создании сотрудников таблицы таблица может использоваться любым человеком, у которого есть права доступа в базе данных для использования ее, пока таблица не удалена. Если сессия базы данных создает локальную временную таблицу #employees, только сессия может работать с таблицей, и она удалена, когда сессия разъединяется. Если Вы составляете глобальную временную таблицу ##employees, любой пользователь в базе данных может работать с этой таблицей. Если никакой другой пользователь не работает с этой таблицей после создания ее таблица удалена, когда Вы разъединяетесь. Если другой пользователь работает с таблицей после создания ее SQL Server удаляет ее после разъединения и после того, как все другие сессии активно больше не используют ее.
Дополнительно от Curt, кто исправил ошибку моих путей и на всякий случай Вы пропускаете цитату в комментарии:
http://msdn.microsoft.com/en-us/library/ms191132.aspx
при создании локальной временной таблицы в хранимой процедуре временная таблица существует только в целях хранимой процедуры; это исчезает при выходе из хранимой процедуры.
при выполнении хранимой процедуры, которая называет другую хранимую процедуру, названная хранимая процедура может получить доступ ко всем объектам, созданным первой хранимой процедурой, включая временные таблицы.
Временные таблицы составлены с искажением имени под капотом, таким образом, не должно быть конфликтов между различными вызовами хранимой процедуры.
, Если необходимо управлять теми же временными данными в последующих вызовах хранимой процедуры, лучше просто идти с реальной таблицей и использовать своего рода уникальный идентификатор, чтобы удостовериться, что Вы только имеете дело с соответствующими данными. Если данные только ценны временно, вручную удалите их, после того как Вы сделаны.
#temptable
не выживает мимо конца процедуры, в которой он был объявлен, таким образом, он никогда не будет замечаться другими пользователями.
Редактирование: Heh, оказывается, что "вложенная видимость" временных таблиц работала начиная с SQL Server 7.0, но я никогда не обновлял ни одного своего кода для использования в своих интересах этого. Я предполагаю, что встречаюсь со мной - много людей, вероятно, не может вообразить ад, который был SQL Server за 6,0 и 6,5 дней...