存储过程,在返回客户端之前将结果存储在另一个表中
Posted
技术标签:
【中文标题】存储过程,在返回客户端之前将结果存储在另一个表中【英文标题】:Stored procedure, storing results in another table before returning to client 【发布时间】:2014-10-08 01:57:29 【问题描述】:存储过程正在使用以下查询来获取结果并将结果返回给客户端。
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);
【问题讨论】:
您上面的查询将结果存储在一个表中,Temp_CurrentProductSet
。 SELECT INTO
就是这样做的。你到底想完成什么?
如果为此使用表,请注意并发性等。除非您添加代码,否则之后数据不会从表中删除,除非您做一些非常棘手的事情,否则两个不同的连接人员会运行相同的存储过程将仅使用相同的表,从而提供意想不到的结果。我建议您提供更多背景信息,说明您为什么要这样做。是否存在性能问题?
在插入中使用输出子句来显示结果
【参考方案1】:
你的问题的关键在于错误:
An object or column name is missing or empty.
您需要为您的 @Lid
字段定义一个列名,例如:
select @Lid as Lid, *
into Temp_CurrentProductSet
from ...
请注意,使用SELECT INTO
会创建一个新表。如果您尝试将值插入到现有表中,则需要使用INSERT INTO SELECT
。
【讨论】:
谢谢,但是插入不会返回,我也想插入并选择发送给客户端。 嗯,听不懂?这会创建一个新表(不是临时表,而是真正的表),然后在您的存储过程中稍后您可以从该表中select
?【参考方案2】:
**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);
【讨论】:
【参考方案3】:正如错误提示,您需要为每个列名定义别名。
试试这个,
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);
【讨论】:
谢谢,我做到了,但仍然无法解决问题。插入将插入但不会发送给客户端,我需要同时做这两件事。以上是关于存储过程,在返回客户端之前将结果存储在另一个表中的主要内容,如果未能解决你的问题,请参考以下文章
将存储过程的结果存储在 Google Big Query 表中
如何在另一个存储过程中调用一个存储过程(PHP 和 mysqli)