nir*_*mus 145 t-sql 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
Run Code Online (Sandbox Code Playgroud)
我想以这种方式在一个过程中使用它:
IF dbo.CheckIfSFExists( 23 ) = 0
SET @retValue = 'bla bla bla';
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
为程序或函数dbo.CheckIfSFExists提供的参数数量不足.
为什么不起作用?
SQL*_*ace 218
你必须像这样称呼它
SELECT dbo.CheckIfSFExists(23, default)
Run Code Online (Sandbox Code Playgroud)
来自Technet:
当函数的参数具有默认值时,必须在调用函数时指定关键字DEFAULT以便检索默认值.此行为与在存储过程中使用具有默认值的参数不同,其中省略参数也意味着默认值.此行为的一个例外是使用EXECUTE语句调用标量函数时.使用EXECUTE时,不需要DEFAULT关键字.
小智 38
您可以通过三种方式调用它 - 使用参数,使用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
Run Code Online (Sandbox Code Playgroud)
Cur*_*urt 16
使用用户定义的函数,您必须声明每个参数,即使它们具有默认值.
以下将成功执行:
IF dbo.CheckIfSFExists( 23, default ) = 0
SET @retValue = 'bla bla bla;
Run Code Online (Sandbox Code Playgroud)