В чем разница между таблицей @, таблицей # и таблицей ## в SQL Server?
sql-server
Крейг Шварц
источник
источник
Посмотри на
источник
#
а##
таблицы - это фактические таблицы, представленные во временной базе данных. Эти таблицы могут иметь индексы и статистику, и к ним можно получить доступ через sprocs в сеансе (в случае глобальной временной таблицы он доступен через сеансы).@Table - это табличная переменная.
Подробнее: http://www.sqlteam.com/article/ Contemporary-tables
источник
Я бы остановился на различиях между #table и @table. ## table - это глобальная временная таблица, и за более чем 10 лет использования SQL Server мне еще предстоит найти допустимый вариант использования. Я уверен, что некоторые из них существуют, но природа объекта делает его крайне непригодным для использования ИМХО.
Ответ на @whiner со стороны @marc_s абсолютно верен: это распространенный миф, что переменные таблицы всегда находятся в памяти. На самом деле довольно часто табличная переменная отправляется на диск и работает так же, как временная таблица.
В любом случае, я предлагаю ознакомиться с множеством различий, пройдя по ссылкам, указанным @Astander. Большая часть различий связана с ограничениями того, что нельзя делать с переменными @table.
источник
CREATE TABLE #t
Создает таблицу, которая видна только во время этого СОЕДИНЕНИЯ, и тот же пользователь, который создает другое подключение, не сможет видеть таблицу #t из другого подключения.
CREATE TABLE ##t
Создает временную таблицу, видимую для других подключений. Но таблица удаляется, когда создание соединения завершается.
источник
SqlConnection.Open()
с той же строкой подключения такое же СОЕДИНЕНИЕ ?если вам нужна уникальная глобальная временная таблица, создайте свою собственную с префиксом / суффиксом Uniqueidentifier и отмените выполнение публикации, если if object_id (.... Единственным недостатком является использование Dynamic sql, и его необходимо явно удалить.
источник