Хранимая процедура, сохраняющая результаты в другой таблице перед возвратом клиенту

Хранимая процедура использует запрос ниже для извлечения и возврата результатов клиенту.

select 
    @Lid, *         
from 
    CurrentProductSet cps 
where 
    cps.State = @state
    and cps.ProductName in (select gbb.ProductName 
                            from HMCGoodBetterBest gbb 
                            where gbb.HMC_Hospital = @hospital 
                              and gbb.HMC_Extras = @extra);

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

Редактировать:

Я пытался с помощью into предложение ниже кода, но я получаю эту ошибку:

Имя объекта или столбца отсутствует или пусто. Для операторов SELECT INTO убедитесь, что у каждого столбца есть имя. Для других операторов ищите пустые псевдонимы. Псевдонимы, определенные как "" или [], не допускаются. Измените псевдоним на допустимое имя.

Код:

select 
    @Lid, * 
into 
    Temp_CurrentProductSet
from 
    CurrentProductSet cps 
where 
    cps.State = @state
    and cps.ProductName in (select gbb.ProductName 
                            from HMCGoodBetterBest gbb 
                            where gbb.HMC_Hospital = @hospital 
                              and gbb.HMC_Extras = @extra);

3 ответа

Решение
**You need to use output clause**

insert into Temp_CurrentProductSet output Inserted.*
select 
@Lid, *         
from 
CurrentProductSet cps 
where 
cps.State = @state
and cps.ProductName in (select gbb.ProductName 
                        from HMCGoodBetterBest gbb 
                        where gbb.HMC_Hospital = @hospital 
                          and gbb.HMC_Extras = @extra);

Ключ к вашей проблеме в ошибке:

An object or column name is missing or empty.

Вам нужно определить имя столбца для вашего @Lid поле, что-то вроде:

select @Lid as Lid, * 
    into Temp_CurrentProductSet
    from ...

Понимаете, используя SELECT INTO создаст новую таблицу. Если вы пытаетесь вставить значения в существующую таблицу, вам нужно использовать INSERT INTO SELECT,

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

Попробуйте это вместо этого,

insert into Temp_CurrentProductSet
select @Lid, *      
    from CurrentProductSet cps 
    where cps.State=@state
    and 
    cps.ProductName in (select gbb.ProductName from HMCGoodBetterBest gbb where gbb.HMC_Hospital=@hospital and gbb.HMC_Extras=@extra);
Другие вопросы по тегам