存储过程,在返回客户端之前将结果存储在另一个表中

时间:2014-10-08 01:57:29

标签: .net sql-server sql-server-2008 stored-procedures clrstoredprocedure

存储过程正在使用以下查询来获取并将结果返回给客户端。

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 个答案:

答案 0 :(得分:2)

问题的关键在于错误:

An object or column name is missing or empty.

您需要为@Lid字段定义列名称,例如:

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

要意识到,使用SELECT INTO将创建一个新表。如果您尝试将值插入现有表中,则需要使用INSERT INTO SELECT

答案 1 :(得分:1)

如错误所示,您需要为每个列名定义别名。

试试这个,

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);

答案 2 :(得分:1)

**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);