ВЫБРАТЬ В динамически - PullRequest
       0

ВЫБРАТЬ В динамически

0 голосов
/ 28 декабря 2011

Мне нужно выбрать пункт INTO динамически, что-то вроде этого:

if @param = 0
   :setvar TARGETTABLE  T_FOO
else
   :setvar TARGETTABLE  T_BAR

SELECT.... INTO $(TARGETTABLE) FROM......;

И, похоже, $(TARGETTABLE) всегда разрешается в "T_BAR". Как это сделать правильно?

(SQLServer 2005)

Ответы [ 3 ]

2 голосов
/ 28 декабря 2011

Так как вы создаете новую таблицу, я предполагаю, что нет никаких ранее существовавших вещей, которые бы зависели от имени таблицы.Почему бы не создать таблицу с некоторым временным именем и затем переименовать ее?

SELECT.... INTO T_TEMP FROM......;

if @param = 0
   EXEC sp_rename 'T_TEMP', 'T_FOO'  
else
   EXEC sp_rename 'T_TEMP', 'T_BAR'  
0 голосов
/ 28 декабря 2011

SELECT INTO создает таблицу с той же схемой, что и таблица в предложении FROM. Другими словами, как-то так:

select *
into NewTable
from ExistingTable

Это создаст NewTable с той же структурой и схемой, что и ExistingTable.

Вы можете сделать:

if @param = 0
begin
    select *
    into NewTable1
    from ExistingTable
end
else
begin
    select *
    into NewTable2
    from ExistingTable
end

Или вы можете сделать это:

declare @newTableName varchar(100)
declare @dynamicSql varchar(1000)

if @param = 0
    set @newTableName = 'NewTable1'
else
    set @newTableName = 'NewTable2'

set @dynamicSql = 'select * into ' + @newTableName + ' from ExistingTable'

exec(@dynamicSql)

В зависимости от того, сколько вариантов (т. Е. Сколько условных операторов вам нужно), если это два или три, я бы выбрал первый. Если имя новой таблицы является параметром для хранимого процесса, я бы использовал динамический SQL.

ПРИМЕЧАНИЕ : в любом случае новая таблица (имя таблицы, указанное в ... INTO TableName должна быть несуществующей таблицей, чтобы вы не выдавали ошибку.

0 голосов
/ 28 декабря 2011

Вы можете сделать это с помощью динамического SQL или просто написав оба запроса.Я бы предложил последнее:

IF (@param = 0)
    SELECT ... INTO T_FOO FROM ...;
ELSE
    SELECT ... INTO T_BAR FROM ...;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...