Таблицы SQL Server: какая разница между @, # и ##?

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

Ответ 1

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

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

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

Ответ 3

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

@table - это переменная таблицы.

Подробнее: http://www.sqlteam.com/article/temporary-tables

Ответ 4

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

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

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

Ответ 5

CREATE TABLE #t

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

CREATE TABLE ##t

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

Ответ 6

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