Временные таблицы SQL Server и пулы соединений

30
задан marc 26 September 2008 в 20:20
поделиться

6 ответов

Организация пула подключений (с любой современной версией SQL Server) будет звонить sp_reset_connection при многократном использовании соединения. Это сохранило proc, среди прочего, отбрасывания любые временные таблицы , которым владеет соединение.

44
ответ дан Community 27 September 2008 в 07:20
поделиться

## таблица будет совместно использована всеми пользователями. Я предполагаю, что это не Ваше намерение.

А single-# временная таблица видим ко всем хранимым процедурам вниз стек вызовов, но не видим вне того объема. Если у Вас может быть Proc вызов B, C, и D, необходимо быть в порядке.

Редактирование: процедура отчетности я должен продолжать работать прямо сейчас, много похожа на это.:) Я составляю временную таблицу (#results) в корне proc, это называет приложение, затем сделайте некоторое сложное искажение данных в ряду дочерних процедур к 1) краткому обзору повторенный код и 2) помешать корневой процедуре работать к 500 + строки.

6
ответ дан Kevin Crumley 27 September 2008 в 07:20
поделиться

Для совместного использования временной таблицы между пользователями используют два хеша перед именем ##like_this.

В этом случае, хотя удостоверяются, что Вы предпринимаете шаги для предотвращения столкновений с несколькими экземплярами программы.

1
ответ дан Jeffrey L Whitledge 27 September 2008 в 07:20
поделиться

Из документов 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

  • при создании локальной временной таблицы в хранимой процедуре временная таблица существует только в целях хранимой процедуры; это исчезает при выходе из хранимой процедуры.

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

2
ответ дан Community 27 September 2008 в 07:20
поделиться
  • 1
    +1 Прохладный. Я didn' t знают, что, и при этом я не встретился с ним. Также я can' t верят it' s взятый меня это долго для выяснения имени:/ – Bohemian♦ 20 May 2013 в 01:24

Временные таблицы составлены с искажением имени под капотом, таким образом, не должно быть конфликтов между различными вызовами хранимой процедуры.

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

0
ответ дан Eric Z Beard 27 September 2008 в 07:20
поделиться
  • 1
    Это you' ре, не столь глупое, как, Вы сначала кажетесь:) – Bohemian♦ 20 May 2013 в 01:55

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

Редактирование: Heh, оказывается, что "вложенная видимость" временных таблиц работала начиная с SQL Server 7.0, но я никогда не обновлял ни одного своего кода для использования в своих интересах этого. Я предполагаю, что встречаюсь со мной - много людей, вероятно, не может вообразить ад, который был SQL Server за 6,0 и 6,5 дней...

3
ответ дан Curt Hagenlocher 27 September 2008 в 07:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: