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

Pic*_*ver 2 t-sql sql-server sql-server-2008

我是 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 
Run Code Online (Sandbox Code Playgroud)

结尾

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

感谢您提供任何帮助。

Mar*_*ith 5

一个函数可以有任意多的RETURN语句。

例如下面有三个。

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

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

RETURN 1/0;
END
Run Code Online (Sandbox Code Playgroud)

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

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

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