Ответ 1
Табличные переменные автоматически локальны и автоматически отбрасываются - вам не о чем беспокоиться.
У меня есть переменная таблицы в script (а не хранимая процедура). Два вопроса:
Здесь мой код:
Declare @projectList table(
name varchar(40) NOT NULL);
Insert Into @projectList
Values ('BCR-00021')
Select *
From @projectList
Drop Table @projectList -- does not work
Табличные переменные автоматически локальны и автоматически отбрасываются - вам не о чем беспокоиться.
Табличные переменные похожи на переменные типа int или varchar.
Вам не нужно их бросать. Они имеют те же правила scope как переменные int или varchar
Объем переменной - это диапазон операторов Transact-SQL, которые могут ссылаться на переменную. Объем переменной длится от той точки, которую объявляется до конца партии или хранимой процедуры, в которой она объявлена.
Just Like TempTables, в TempDB также создается локальная переменная таблицы. Объем переменной таблицы - это пакетная, хранимая процедура и операторный блок, в котором он объявлен. Они могут передаваться как параметры между процедурами. Они автоматически удаляются, когда вы закрываете сеанс, на котором вы их создаете.
Но вы все забыли упомянуть, что если переменная-таблица используется в цикле, ей потребуется очистить (удалить @table) до загрузки данных снова в цикле.
если кто-то еще сталкивается с этим... и вам действительно нужно отбросить его, как в цикле, вы можете просто удалить все из переменной таблицы:
DELETE FROM @tableVariableName