Во-первых, у Sql Server нет SCOPE для переменных, которые вы ищете. Так что нет, это не может быть сделано, как вы хотите.
Взгляните на Переменные Transact-SQL
Область действия переменной - это диапазон
операторов Transact-SQL, которые могут
ссылка на переменную. Сфера
переменная длится с того момента, как это
объявлено до конца партии или
хранимая процедура, в которой это
объявлено.
Во-вторых, вы, вероятно, должны использовать SELECT *
для вставки в эти таблицы, как я думаю, вы, возможно, пытаетесь.
Что вы можете сделать, это объявить таблицу один раз, перед IF, и вставить только те значения, которые вы хотите использовать.
Например
INSERT INTO @table_1 (col1, col2, col3)
SELECT Col1, col2, col3
FROM ...
или
INSERT INTO @table_1 (col1, col3)
SELECT Col1, col3
FROM ...
Для вашей попытки вам, однако, придется объявить переменную таблицы один раз, содержащий не менее ALL требуемых столбцов, и вставлять в таблицу только необходимые столбцы при различных шагах / условиях. Затем верните только то, что вы хотите.