您可以在函数内使用默认参数,就像在存储过程中一样吗?

时间:2015-08-14 10:41:33

标签: sql-server sql-server-2008 sql-function

我试图在函数中包含默认参数(而不是存储过程)。我无法让它工作,我尝试调用它没有传递默认参数它给我错误'..insufficient parameters ..'。

是否可以使用以下任何一个的默认参数,如果是这样,它似乎必须以不同的方式处理,所以你如何做:

  • 表值函数
  • 标量值函数
  • 聚合函数
  • 系统功能

我尝试使用谷歌搜索,并搜索SO,但我找到的所有内容只处理存储的参数,这在这种情况下无效。

编辑:这就是我尝试创建函数的方式:

CREATE FUNCTION MyFunction (@firstparam bit, @secondparam bit = 1) RETURNS @retparam table (columnname bit)

然后我会尝试用

的内容来调用它
SELECT *
    FROM table1
    WHERE table1.uid IN (select columnname from dbo.MyFunction(1))

这导致错误'..Insufficient parameters ..'

2 个答案:

答案 0 :(得分:1)

您可以使用参数的默认值,但不能像过程那样使用。您必须指定所有参数,并使用关键字default作为要使用默认值的参数。

create function dbo.GetIt(@P1 int = -1) returns int
as
begin
  return @P1;
end

go

select dbo.GetIt(default);

结果:

-1

来自:CREATE FUNCTION (Transact-SQL)

  

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

答案 1 :(得分:0)

评论太长了。

我想只有真正绝望的看documentation。很明显,支持默认参数。以下是语法的相关部分:

  

创建功能[schema_name。 ] function_name([{@ parameter_name [

     

AS] [type_schema_name。 ] parameter_data_type

[ = **default** ] [ READONLY ] } 

[ ,...n ]   ] )

进一步跟着:

  

[=默认]

     

是参数的默认值。如果定义了默认值,   可以在不指定该值的情况下执行该函数   参数。

您没有提供有关您正在做什么的提示,但功能不使用default关键字。他们只使用=