我是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。
感谢任何帮助,谢谢。
答案 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%肯定它永远不会执行。