Ответ 1
@tableName
Табличные переменные живы для продолжительности работы script, т.е. они являются только объектами уровня сессии.
Чтобы проверить это, откройте два окна редактора запросов под студией управления sql server и создайте переменные таблицы с тем же именем, но с разными структурами. Вы получите представление. Таким образом, объект @tableName
является временным и используется для нашей внутренней обработки данных и не вносит вклад в фактическую структуру базы данных.
Существует другой тип объекта таблицы, который может быть создан для временного использования. Это #tableName
объекты, объявленные как аналогичные инструкции create для физических таблиц:
Create table #test (Id int, Name varchar(50))
Этот объект таблицы создается и сохраняется в базе данных temp. В отличие от первого, этот объект более полезен, может хранить большие данные и принимать участие в транзакциях и т.д. Эти таблицы сохраняются до тех пор, пока соединение не будет открыто. Вы должны сбросить созданный объект, выполнив script перед его повторным созданием.
IF OBJECT_ID('tempdb..#test') IS NOT NULL
DROP TABLE #test
Надеюсь, это имеет смысл!