2017-03-26 62 views
0

我有一個臨時表,我從存儲過程中填充。一旦數據在臨時表中,我就使用它來運行計算並填充其他字段。SQL Server - 在選擇中執行SP

例子:

CREATE TABLE #Result1 (
    SOrder integer, 
    Var1 double, 
    Var2 double, 
    Var3 double, 
    Calc1 double, 
    Calc2 double) 

--Fills the Temp Table initially 
Insert #Result1 
(Select sorder, var1, var2, var3, 0,0,0 from myTable) 


--Fills with calculation stuff 
Select SOrder = 0, 
     Calc1 = Var1/Var2 * 100 
     Calc2 = (Var2-Var1)/Var3 * 100 
From #Result1 

我希望能夠做的是這樣的:

--Fills with SP stuff 
Select SOrder = 0, 
     Calc1 = exec spLocal_CalcMetric (Var1, Var2) 
     Calc2 = exec spLocal_CalcMetric (Var1, Var2) 
From #Result1 

有沒有辦法做這樣的事情從一個SP返回到更新臨時表?

+1

你可以用一個函數,而不是一個程序做,但你正在做的是在這裏複雜的一個簡單的選擇。 – DavidG

+0

它實際上比這更復雜,我只是不想在這裏放置很多專有SQL。抱歉。 – Andrew

回答

2

你可以用function而不是procedure來做到這一點,但是你所做的只是讓一個簡單的選擇複雜化。函數也可能是一個性能問題。但是,你可以這樣做:

CREATE FUNCTION dbo.Local_CalcMetric 
(
    @var1 DOUBLE, 
    @var2 DOUBLE, 
    @var3 DOUBLE 
) 
RETURNS DOUBLE 
AS 
BEGIN 
    RETURN (@[email protected])/@var3 * 100 
END 

並使用它:

SELECT SOrder = 0, 
     Calc1 = dbo.Local_CalcMetric (Var1, Var2, Var3) 
     Calc2 = dbo.Local_CalcMetric (Var1, Var2, Var3) 
FROM #Result1 
+0

我要調用的存儲過程有很多東西在裏面......不是像所示的那樣簡單的A/B。這就是原因。我試圖在這裏簡化這個概念,所以它更有意義(並且不會泄露專有信息)。謝謝。 – Andrew