T-SQL - 具有默认参数的函数

时间:2011-12-02 15:06:42

标签: tsql function default-parameters

我有这个脚本:

CREATE FUNCTION dbo.CheckIfSFExists(@param1 INT, @param2 BIT = 1 )
RETURNS BIT
AS
BEGIN
    IF EXISTS ( bla bla bla )
        RETURN 1;
    RETURN 0;
END
GO

我想以这种方式在程序中使用它:

IF dbo.CheckIfSFExists( 23 ) = 0
    SET @retValue = 'bla bla bla';

但我收到错误:

  

为程序或函数dbo.CheckIfSFExists提供的参数数量不足。

为什么不起作用?

4 个答案:

答案 0 :(得分:204)

你必须像这样称呼它

SELECT dbo.CheckIfSFExists(23, default)

来自Technet

  

当函数的参数具有默认值时,关键字   必须在调用函数时指定DEFAULT   检索默认值。此行为与使用不同   在省略的存储过程中使用默认值的参数   该参数还表示默认值。这个例外   行为是在使用EXECUTE调用标量函数时   声明。使用EXECUTE时,不需要DEFAULT关键字。

答案 1 :(得分:36)

您可以通过三种方式调用它 - 使用参数,使用DEFAULT和通过EXECUTE

SET NOCOUNT ON;

DECLARE
@Table  SYSNAME = 'YourTable',
@Schema SYSNAME = 'dbo',
@Rows   INT;

SELECT dbo.TableRowCount( @Table, @Schema )

SELECT dbo.TableRowCount( @Table, DEFAULT )

EXECUTE @Rows = dbo.TableRowCount @Table

SELECT @Rows

答案 2 :(得分:16)

使用用户定义的函数,您必须声明每个参数,即使它们具有默认值。

以下将成功执行:

IF dbo.CheckIfSFExists( 23, default ) = 0
    SET @retValue = 'bla bla bla;

答案 3 :(得分:-4)

解决此问题的一种方法是使用带有输出参数的存储过程。

exec sp_mysprocname @returnvalue output,@ firstparam = 1,@ secondparam = 2

默认情况下,您不会将值传递给存储过程本身中设置的默认值。您可以从输出变量中获得结果。