Таблицы SQL Server: в чем разница между @, # и ##? - PullRequest
85 голосов
/ 08 февраля 2010

В SQL Server, в чем разница между таблицей @, таблицей # и таблицей ##?

Ответы [ 6 ]

106 голосов
/ 08 февраля 2010

#table относится к локальной (видимой только пользователю, создавшему ее) временной таблице.

##table относится к глобальной (видимой для всех пользователей) временной таблице.

@variableName относится к переменной, которая может содержать значения в зависимости от ее типа.

7 голосов
/ 08 февраля 2010
Таблицы

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

@table является табличной переменной.

Для более: http://www.sqlteam.com/article/temporary-tables

6 голосов
/ 08 февраля 2010

Я бы сосредоточился на различиях между #table и @table. ## table - это глобальная временная таблица, и за более чем 10-летнюю историю использования SQL Server мне еще не приходилось сталкиваться с правильным вариантом использования. Я уверен, что некоторые существуют, но природа объекта делает его крайне непригодным ИМХО.

Ответ на @whiner @marc_s абсолютно верен: распространенный миф о том, что переменные таблицы всегда живут в памяти. На самом деле для табличной переменной довольно распространено переходить на диск и работать так же, как временная таблица.

В любом случае, я предлагаю ознакомиться с множеством различий, следуя ссылкам, указанным @Astander. Большая часть различий заключается в ограничении того, что нельзя делать с переменными @table.

4 голосов
/ 16 октября 2014
CREATE TABLE #t

Создает таблицу, которая видна только во время и во время этого СОЕДИНЕНИЯ тот же пользователь, который создает другое соединение, не сможет увидеть таблицу #t из другого соединения.

CREATE TABLE ##t

Создает временную таблицу, видимую для других соединений. Но таблица удаляется, когда завершается создание соединения.

0 голосов
/ 02 мая 2016

Если вам нужна уникальная глобальная временная таблица, создайте свою собственную с помощью Префикса / Суффикса Uniqueidentifier и отмените выполнение после выполнения, если if object_id (.... Единственный недостаток - использование Dynamic SQL и необходимость явного удаления.

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