Как удалить табличные переменные в SQL-Server? Должен ли я это сделать?

У меня есть переменная таблицы в script (а не хранимая процедура). Два вопроса:

  • Как удалить переменную таблицы? Drop Table @varName дает ошибку "Неправильная snytax".
  • Должен ли я всегда это делать? Я слышал, что это хорошая практика. Действительно ли это необходимо для небольших скриптов, подобных этому?

Здесь мой код:

Declare @projectList table(
    name varchar(40) NOT NULL);

Insert Into @projectList
Values ('BCR-00021')

Select *
From @projectList

Drop Table @projectList -- does not work

Ответ 1

Табличные переменные автоматически локальны и автоматически отбрасываются - вам не о чем беспокоиться.

Ответ 2

Табличные переменные похожи на переменные типа int или varchar.

Вам не нужно их бросать. Они имеют те же правила scope как переменные int или varchar

Объем переменной - это диапазон операторов Transact-SQL, которые могут ссылаться на переменную. Объем переменной длится от той точки, которую объявляется до конца партии или хранимой процедуры, в которой она объявлена.

Ответ 3

Just Like TempTables, в TempDB также создается локальная переменная таблицы. Объем переменной таблицы - это пакетная, хранимая процедура и операторный блок, в котором он объявлен. Они могут передаваться как параметры между процедурами. Они автоматически удаляются, когда вы закрываете сеанс, на котором вы их создаете.

Ответ 4

Но вы все забыли упомянуть, что если переменная-таблица используется в цикле, ей потребуется очистить (удалить @table) до загрузки данных снова в цикле.

Ответ 5

если кто-то еще сталкивается с этим... и вам действительно нужно отбросить его, как в цикле, вы можете просто удалить все из переменной таблицы:

DELETE FROM @tableVariableName