首页 > 解决方案 > 使用 EXECUTE 从 SQL Server 调用用户定义函数时的不同标量结果

问题描述

通常,在使用 UDF 时,我坚持通过调用它们,SELECT但最近需要使用EXECUTE,并且在测试时发现很明显有问题。以下是目击行为的示例;

CREATE FUNCTION dbo.[fn_Example]
(
  @code AS NVARCHAR(2)
)
RETURNS FLOAT
AS
BEGIN
  DECLARE @result FLOAT
  IF @code = 'A'
    SET @result = 0
  ELSE
    SET @result = 0.2
  RETURN @result
END

使用SELECT预期结果调用上述UDF时返回;

SELECT dbo.fn_Example('B')

输出:

0.2

但是使用EXECUTE结果调用时是不正确的;

DECLARE @rtn INT
EXEC @rtn = dbo.[fn_Example] @code = 'B'
SELECT @rtn

输出:

0

已经尝试过WITH RECOMPILE,但没有区别,就如何通过调用标量 UDF 而言,我从根本上做错了EXECUTE什么吗?

标签: sql-serversql-server-2014user-defined-functions

解决方案


@Larnu 的评论绝对正确。INT当 UDF 期待 a 时,我将返回值设置为FLOAT.

应该用过;

DECLARE @rtn FLOAT
EXEC @rtn = dbo.[fn_Example] @code = 'B'
SELECT @rtn

推荐阅读