如何将存储过程中的数据用于第二个过程?

时间:2015-06-27 23:15:26

标签: sql sql-server-2008 stored-procedures

最近几个月,我非常感谢论坛上的所有主题,感谢大家都在努力回答这些问题。他们帮助我创建了我的程序,但现在我被卡住了。 到目前为止,相关主题还没有给我一个解决方案。

另见本页:http://www.sommarskog.se/share_data.html

让我解释一下情况:

我已经创建了两个完美运作的程序。他们使用温度表。

下面我尽可能详细地写出来(我希望)。如果需要进一步的信息,我当然可以这样做。

这两个程序:

1 - 由自己的司机,卡车,燃料消耗计算的成本> 命名为CostOM

2 - 旅行中的收入和成本计算(订单收入,运输成本,通行费等)> 名为Trip_margin

我需要添加到第二个程序(Trip_margin)的是来自第一个程序(CostOM)的计算金额,该程序位于名为' CostOwnMat'的列中。 (代表自己材料的成本)。

两个过程都使用相同的主键结构,即tripnumber。

他们唯一的区别是,程序1可以多次具有相同的行程编号,因为行程可以是2个或更多的驾驶员。

所以我需要' CostOwnMat'的总和。并在名为' total_cost_OM'的新列中的第二个过程中返回此内容。

当我有这个时,我就有了计算行程保证金所需的行程收入,成本等。

我认为以下是解决方案的方向,但如何应用此方法?

•表变量(DECLARE @t TABLE)仅对创建它的连接可见,并在批处理或存储过程结束时删除。

•本地临时表(CREATE TABLE #t)仅对创建它的连接可见,并在连接关闭时删除。

•所有人都可以看到全局临时表(CREATE TABLE ## t),并且当引用它们的所有连接都已关闭时,将删除它们。

•每个人都可以看到Tempdb永久表(USE tempdb CREATE TABLE t),并在重新启动服务器时删除它们。

1 个答案:

答案 0 :(得分:0)

您可以使用第二种解决方案,即本地临时表。

然而,使用此解决方案时,您需要注意并发用户在实时应用程序中使用相同的过程。

首先,您需要根据流程创建具有唯一名称的临时表,如下所示:

EXEC ('CREATE TABLE #tmpTable' + CAST(@@SPID AS VARCHAR) + ' 
(fld1 INT NULL) ');

当你需要在第二个/另一个程序中使用时,第二件事是表的存在:

IF OBJECT_ID('tempdb..#tmpTable') 
BEGIN
     -- your code
END