SQL函数中的两个返回语句是什么意思?

时间:2016-08-29 15:12:33

标签: sql-server sql-server-2008 tsql

我是SQL新手。我正在分析这个计算安全库存的SQL函数,我遇到了一些我以前从未见过的东西。

这是一个返回小数的标量函数。但是代码的结尾是这样的:

DECLARE @SafetyStockUnitsCalcNew decimal(14,2)  
RETURN( SELECT 
  STDEV(
     .
     .
     Code for calculating Safety Stock goes here. 

       )

-- Return the result of the function
RETURN @SafetyStockUnitsCalcNew 

END

那么归还什么?第一个返回语句还是第二个返回语句?第一个也是第二个标量值。此外,一旦宣布@SafetyStockUnitsCalcNew,它将永远不会被使用,直到它被返回。所以我不知道它在哪里设置。 STDEV中的代码根本没有引用@SafetyStockUnitsCalcNew。

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:2)

一个函数可以包含任意数量的RETURN语句。

E.g。下面有三个。

当控制流遇到return语句时,函数的执行停止并返回值。

CREATE FUNCTION dbo.Foo(@x int)
RETURNS INT
AS
BEGIN 
IF @x = 1
   RETURN 10;
ELSE
   RETURN 18;

RETURN 1/0;
END

SQL Server不执行与C#中相同级别的分析,以检测所有代码路径返回值并警告您无法访问的代码。它只是坚持最后一个声明必须是return

在上面的示例中,永远无法访问第三个RETURN语句,但如果没有它,您将看到错误“函数中包含的最后一个语句必须是返回语句。”。

在您的示例中,永远无法访问第二个RETURN语句,并且“最后语句”规则也不需要它,因此它是无用的。也许最初SELECT将结果分配给变量,然后编码它的人意识到他们可以直接返回SELECT结果。

答案 1 :(得分:0)

我会继续测试服务器,创建该功能并注释掉第二个RETURN,看看会发生什么。我99%肯定它永远不会执行。