2017-03-26 65 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