Временные таблицы в SQL Server многопользовательские безопасны? - PullRequest
8 голосов
/ 08 августа 2009

Является ли временная таблица локальной для потока или глобальной для сервера?

Ответы [ 4 ]

20 голосов
/ 08 августа 2009

#temp является областью сеанса
##temp это область сервера

MSDN:

Видны локальные временные таблицы только в текущем сеансе, и глобальные временные таблицы видны все сеансы

...

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

Все остальные локальные временные таблицы упал автоматически в конце текущий сеанс.

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

2 голосов
/ 08 августа 2009

Локальные временные таблицы могут быть созданы с помощью знака хеш (#) перед именем таблицы. Они видны только в текущем соединении. Когда соединение разорвано, его область действия также заканчивается. Можно создать и использовать локальную временную таблицу с одним и тем же именем одновременно в двух разных соединениях. Чтобы разрешить такое поведение, SQL Server суффиксует имя локальной временной таблицы с добавочной шестнадцатеричной цифрой, которая сбрасывается при перезапуске служб SQL

см. http://blog.sqlauthority.com/2009/03/29/sql-server-fix-error-msg-2714-level-16-state-6-there-is-already-an-object-named-temp-in-the-database/

0 голосов
/ 08 августа 2009

Зависит от того, что вы подразумеваете под «временной таблицей». Если вы имеете в виду таблицы с префиксом #, их реальное имя будет содержать идентификатор соединения и будет уникальным для каждого соединения. Однако, если вы вручную создаете таблицу в базе данных tempdb, она будет обрабатываться как все обычные таблицы.

0 голосов
/ 08 августа 2009

создание #tempTable является локальным по объему, но может использоваться совместно во вложенных, называемых хранимых процедурах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...