2010-10-20 3 views
0

Я работаю в SQL Server 2008, и я пытаюсь выбрать временную таблицу на основе определенного условия ... для отчета мне нужно до 18% записей, относящихся к определенному типу продукта.sql server условный выбор в таблице temp

if ((@totalRecords * .18) > @productTypeCount) 
    select * into #tmpLP_REIT 
    from myTable where productType = @productType 
else 
    select top 18 percent * into #tmpLP_REIT 
    from myTable where productType = @productType 

я получаю ошибку «уже есть объект с именем„#tmpLP_REIT“в базе данных», хотя я знаю, что это не там, потому что, когда я пытаюсь бросить такую ​​таблицу, это указывает на то, что Безразлично» t существует. Я также получаю эту ошибку в предложении else.

Кажется, что он игнорирует мое заявление if и идет прямо через создание первой таблицы, а затем пытается создать ее снова. какие-либо предложения?

Просьба и благодарность в расширенном виде.

ответ

1

Является ли этот код в цикле? .. Это объясняет ошибку, если это происходит во второй раз. Если нет, синтаксический анализатор должен просто задыхаться, потому что он видит 2 запроса, создающих одну и ту же таблицу, не понимая, что это условное.

Одним из решений было бы создать таблицу сначала, а затем сменить синтаксис этих 2 запросов на insert into запросов.

Другим решением было бы использовать динамический SQL ... построить правильный запрос в условном выражении, а затем выполнить его впоследствии. Это должно пройти проверку, которую вы сейчас запускаете.

+0

Причина, по которой я пытался избежать этого, состояла в том, что это только первое из нескольких таблиц, в результате чего я создам ... довольно значимые таблицы, поэтому select in сократит много кода и усилий :) – IWriteApps

+0

@Gio ahh .. ну, я добавил еще одну возможность для моего ответа. Кроме того, вы не упомянули, было ли это в цикле или нет? – Fosco

+0

О да, извините, не в петле. – IWriteApps

Смежные вопросы