我有这个当前的SP:
ALTER PROCEDURE [dbo].[GetHighestDrop]
@val1 AS FLOAT ,
@val2 AS FLOAT ,
@val3 AS FLOAT
AS
BEGIN
select case when @val1 < @val2 then
case when @val1 < @val3 then @val1
else @val3
end
when @val2 < @val3 then @val2
else @val3
end
END
我用这种语法调用它:
SELECT
GetHighestDrop @val1=((clmnA/clmnB)-1)*100,@val2=2,@val3=3
FROM dbo.tstTable
clmnA和clmbB包含数字,如果我单独运行它们,如:
SELECT ((clmnA/clmnB)-1)*100 FROM dbo.tstTable
我得到一个结果,这是一个浮点数,但是当我通过GetHighestDrop运行它时,它会失败。
知道为什么吗?
答案 0 :(得分:3)
您只能使用exec
调用存储过程。无法在select
内运行存储过程。
考虑将您的程序转换为scalar user-defined function。
示例函数使用(不要忘记模式名称,通常是“dbo”):
select dbo.GetHighestDrop( ((clmnA/clmnB)-1)*100, 2, 3) as Col1
from dbo.tstTable
答案 1 :(得分:0)
可能是您的存储过程没有返回任何值吗?尝试必须返回至少一个值的函数。如果要使用存储过程,则必须添加out
参数。