2015-06-27 15 views
1

最近幾個月,我非常感謝論壇上的所有主題,這要感謝每個人都在努力回答他們的問題。他們幫助我創建我的程序,但現在我卡住了。 迄今爲止,相關主題還沒有給我一個解決方案。如何將存儲過程中的數據用於第二個過程?

又看了看這個頁面:http://www.sommarskog.se/share_data.html

讓我解釋一下這種情況:

我已經創建了他們很好地工作兩個過程。他們與溫牀一起工作。

下面我寫出了儘可能具體(我希望)。如果需要更多信息,我當然可以提供。

的兩個過程:

1 - 通過自己的司機,卡車油耗>命名爲德,崔根源

2取得成本的計算 - 就行了收入和成本的計算(訂單收入,運輸成本,收費成本等)>named 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)對每個人都是可見的,並在服務器重新啓動時被刪除。

+0

如果您從另一個存儲過程調用另一個存儲過程,則可以使用本地臨時表,並且其數據將在被調用的存儲過程中可見。唯一的缺點是在被調用的過程中,應該使臨時表存在。 – Jeremy

+0

嗨傑里米在閱讀你的評論時我開始以爲我已經在測試中完成了這項工作。只有導致錯誤我想我必須找到另一種解決方案。所以我又試了一遍,簡化了,並且工作。所以現在我也爲SP做了這個問題。謝謝你的回答給了我一個跟隨的方向。問候阿諾 –

回答

0

你可以去第二個解決方案,本地臨時表。

然而,隨着這個解決方案,你需要小心,當併發用戶在實時應用程序中使用相同的過程。

要做到這一點,首先您需要創建臨時表,唯一的名稱,每個過程,象下面這樣:

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

第二件事是表的存在,當你需要在第二個使用/另外一個程序:

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

嗨Bhavesh,在這一點上,我做了一些嘗試,我得到它運行,因爲我想要它。我測試了一個更簡單的SP。這很有效,所以我在問題中也做了同樣的事情。我使用了Global temp,創建表## CostEM_tb (col1,col2,.......)。它有訣竅。我想我明白你在警告什麼。但我不認爲這會是一個問題。該過程是用於自動報告的功能。問候,阿諾 –

相關問題