带默认参数的 T-SQL 函数

我有个剧本:

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 提供的参数数量不足。

为什么它不工作?

189004 次浏览

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

下列措施将成功实施:

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

你得这么说

SELECT dbo.CheckIfSFExists(23, default)

来自 Technet:

当函数的参数具有默认值时,关键字 调用函数时必须指定 DEFAULT,以便 检索默认值。此行为与使用 存储过程中具有默认值的参数,其中省略 参数也暗示了默认值 行为是在使用 EXECUTE 调用标量函数时 在使用 EXECUTE 时,不需要 DEFAULT 关键字。

可以通过三种方式调用它——使用参数、 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

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

Exec sp _ mysprocname@return value output,@firstparam = 1,@second param = 2

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