Переменная таблицы SQL - PullRequest
       1

Переменная таблицы SQL

2 голосов
/ 21 января 2010

Вот мой простой вопрос: я хочу объявить переменную таблицы с разными столбцами в соответствии со значением предопределенной переменной

Запрос следующий:

if (@a = 1)

begin

  declare @table_1 table (
    col1 int,    
    col2 int,
    col3 int     
 )

end

else

begin

   declare @table_1 table (    
     col1 int,
     col3 int    
   )

end

Но ошибка выдает сообщение "Имя переменной '@ table_1' уже объявлено. Имена переменных должны быть уникальными в пределах пакета запроса или хранимой процедуры"

Есть ли способ сделать это?

Ответы [ 3 ]

2 голосов
/ 21 января 2010

Используйте разные переменные или просто не используйте все столбцы. Вы не можете изменить схему табличной переменной mid-query.

Для информации, если вы переносите некоторый код #temp_table, обратите внимание, что это также плохая идея, поскольку она может вызвать перекомпиляцию. Плюс смешивание DDL и DML никогда не было хорошей идеей.

0 голосов
/ 21 января 2010

Во-первых, у 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 требуемых столбцов, и вставлять в таблицу только необходимые столбцы при различных шагах / условиях. Затем верните только то, что вы хотите.

0 голосов
/ 21 января 2010

Что вы тогда делаете с таблицей в остальной части вашего запроса? Вы не можете назвать это Table1 и Table2 и затем использовать соответствующий?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...