我试图在函数中包含默认参数(而不是存储过程)。我无法让它工作,我尝试调用它没有传递默认参数它给我错误'..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 ..'
答案 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
关键字。他们只使用=
。