SQL中用户定义函数中的语法错误

时间:2014-11-10 00:28:12

标签: sql sql-server

我无法理解为什么这个代码计算多维数据集的代码导致错误过程或函数'CubicVolume'需要参数'@CubeLength',这是未提供的..

CREATE FUNCTION CubicVolume
-- Input dimensions in centimeters
(
@CubeLength decimal(4,1), 
@CubeWidth  decimal(4,1),
@CubeHeight decimal(4,1)
)
RETURNS decimal(12,3)
AS
   BEGIN
RETURN(@CubeLength * @CubeWidth * @CubeHeight)
END

然后我尝试使用EXEC CubicVolume执行它,这就是执行存储过程的方法。 我知道一些语法错了,但我无法分辨到哪里。

谢谢

1 个答案:

答案 0 :(得分:2)

我假设是SQL Server。

您定义了标量函数,但尝试像存储过程一样调用它。两者不一样。存储过程基本上是按顺序执行的批处理SQL语句,并可选择将结果集发送回客户端。标量函数的行为类似于内置函数(例如LEN()CHARINDEX()ABS()等。也就是说,它们属于SELECT语句中的表达式,或道德等价物。因此,您需要在SELECT语句中使用函数,以便使用列或表达式。例子:

SELECT dbo.CubicVolume(12, 5, 3) AS vol
-- result is: 180

SELECT CubeName, l, w, h FROM dbo.SomeTable WHERE dbo.CubicVolume(l, w, h) > 200
-- result could be something like: MyCube, 10, 10, 10 etc.

基本上,它等同于使用基于列或常量的数学表达式。您无法在其上使用EXEC