Я понимаю, чего вы пытаетесь достичь. Добро пожаловать в мир разнообразных баз данных!
SQL Server 2000 поддерживает временные таблицы, созданные путем добавления префикса # к имени таблицы, превращения его в локально доступную временную таблицу (локальную для сеанса) и предшествующего ## имени таблицы, для глобально доступных временных таблиц, например #MyLocalTable и ## MyGlobalTable соответственно.
SQL Server 2005 и выше поддерживают как временные таблицы (локальные, глобальные), так и переменные таблиц - обратите внимание на новые функциональные возможности переменных таблиц в SQL 2008 и выпустите две! Разница между временными таблицами и табличными переменными не так велика, но заключается в способе обработки сервером базы данных.
Я бы не хотел говорить о более старых версиях SQL-сервера, таких как 7, 6, хотя я работал с ними, и это то, откуда я пришел: -)
Принято считать, что переменные таблицы всегда находятся в памяти, но это неправильно. В зависимости от использования памяти и объема транзакций сервера базы данных страницы табличной переменной могут быть экспортированы из памяти и записаны в базу данных tempdb, а остальная часть обработки выполняется там (в базе данных tempdb).
Обратите внимание, что база данных tempdb является экземпляром, в котором нет постоянных объектов, но она отвечает за обработку рабочих нагрузок, связанных с побочными транзакциями, такими как сортировка и другая обработка, которая носит временный характер. С другой стороны, переменные таблицы (обычно с меньшими данными) хранятся в памяти (ОЗУ), что делает их более быстрым доступом и, следовательно, меньшим дисковым вводом-выводом с точки зрения использования диска tempdb при использовании переменных таблицы с меньшими данными по сравнению с временными таблицами, которые всегда войти в базу данных tempdb.
Переменные таблиц нельзя индексировать, в то время как временные таблицы (как локальные, так и глобальные) можно индексировать для ускорения обработки в случае большого объема данных. Таким образом, вы знаете свой выбор в случае более быстрой обработки с большими объемами данных с помощью временных транзакций. Также стоит отметить, что транзакции только для переменных таблицы не регистрируются и не могут быть откатлены, в то время как транзакции, выполненные во временных таблицах, могут быть откатлены!
Таким образом, переменные таблицы лучше подходят для небольших данных, в то время как временные таблицы лучше для временных данных, которые обрабатываются временно. Если вам также необходимо надлежащее управление транзакциями с использованием блоков транзакций, переменные таблиц не подходят для отката транзакций, поэтому в этом случае лучше использовать временные таблицы.
Наконец, временные таблицы всегда увеличивают дисковый ввод-вывод, поскольку они всегда используют базу данных tempdb, в то время как переменные таблицы могут не увеличивать ее в зависимости от уровней нагрузки на память.
Дайте мне знать, если вы хотите получить советы о том, как настроить базу данных tempdb, чтобы получить гораздо более высокую производительность и превысить 100%!