唤醒调用返回标量值的用户定义函数

在 Transact-SQL 语句中允许相同数据类型的标量表达式的任何位置,可唤醒调用返回标量值的用户定义函数:

查询

在以下位置允许返回标量值的用户定义函数:

CHECK 约束

如果传递给函数的参数值仅引用表中的列或常量,则可以在 CHECK 约束中唤醒调用返回标量值的用户定义函数。查询处理器每次检查约束时,都使用与所检查的当前行相关联的参数值调用函数。表的所有者还必须是由表的 CHECK 约束唤醒调用的用户定义函数的所有者。

DEFAULT 定义

如果传递给函数的参数值仅包含常量,则用户定义函数可作为 DEFAULT 定义的 constant_expression 唤醒调用。表的所有者还必须是由表的 DEFAULT 定义调用的用户定义函数的所有者。

计算列

如果传递给函数的参数值仅引用表中的列或常量,则可由计算列唤醒调用函数。表的所有者还必须是由表的计算列调用的用户定义函数的所有者。

赋值运算符

赋值运算符 (left_operand = right_operand) 可唤醒调用用户定义函数,以便在指定为右操作数的表达式中返回标量值。

控制流语句

布尔表达式中的控制流语句可唤醒调用返回标量值的用户定义函数。

CASE 表达式

在任何 CASE 表达式中可唤醒调用返回标量值的用户定义函数。

PRINT 语句

返回字符串的用户定义函数可作为 PRINT 语句的 string_expr 表达式唤醒调用。

函数和存储过程

执行返回标量值的用户定义函数

可采用与存储过程相同的方式执行返回标量值的用户定义函数。当执行返回标量值的用户定义函数时,指定参数的方式与指定存储过程的方式相同:

以下是返回小数的用户定义函数的定义:

CREATE FUNCTION fn_CubicVolume
-- Input dimensions in centimeters.
   (@CubeLength decimal(4,1), @CubeWidth decimal(4,1),
    @CubeHeight decimal(4,1) )
RETURNS decimal(12,3) -- Cubic Centimeters.
WITH SCHEMABINDING
AS
BEGIN
   RETURN ( @CubeLength * @CubeWidth * @CubeHeight )
END

以下是执行 fn_CubicVolume 函数的示例。使用 Transact-SQL EXECUTE 语句时,参数的标识次序与函数定义中的参数标识次序不同:

DECLARE @MyDecimalVar decimal(12,3)
EXEC @MyDecimalVar = dbo.fn_CubicVolume @CubeLength = 12.3,
                        @CubeHeight = 4.5, @CubeWidth = 4.5

以下是执行 fn_CubicVolume 函数时不指定参数名的示例:

DECLARE @MyDecimalVar decimal(12,3)
EXEC @MyDecimalVar = dbo.fn_CubicVolume 12.3, 4.5, 4.5

还可使用 ODBC CALL 语法从 OLE DB 或 ODBC 应用程序执行 fn_CubicVolume 函数:

-- First use SQLBindParam to bind the return value parameter marker
-- to a program variable of the appropriate type
SQLExecDirect(hstmt,
              "{ CALL ? = fn_CubicVolume(12.3, 4.5, 4.5) }",
              SQL_NTS);