SQL UDF中没有DEFAULT关键字的可选参数

时间:2014-07-24 08:29:41

标签: sql sql-server function

我正在寻找一个解决方案,如何使用可选参数创建SQL UDF。

函数的伪代码,其中Param1是必需的,Param2可以填充(但不需要):

dbo.myFnc(Param1 int [, Param2 int])

有没有办法创建这个功能?对于现有的内置样本,请STR function

STR ( float_expression [ , length [ , decimal ] ] )

3 个答案:

答案 0 :(得分:6)

与存储过程不同,您需要将所有参数传递给函数。您可以使用default关键字指示默认值将用于参数,而不是用户指定的值。

所以你可以像这样创建你的函数:

CREATE FUNCTION dbo.myFnc
(
 @param1 int,
 @param2 int)

...

然后调用这个函数:

dbo.myFnc(Param1, default)

答案 1 :(得分:2)

您可以在create statement(= default)中定义默认参数:

--Transact-SQL Inline Table-Valued Function Syntax 
CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type 
    [ = default ] [ READONLY ] } 
    [ ,...n ]
  ]
)
RETURNS TABLE
    [ WITH <function_option> [ ,...n ] ]
    [ AS ]
    RETURN [ ( ] select_stmt [ ) ]
[ ; ]

Source MSDN

所以你可以这样做:

CREATE FUNCTION dbo.myFnc(
 @param1 int, -- necessary
 @param2 int = 5 -- 5 as default
)

但是,正如shree.pat18所说,你需要使用&#34;默认&#34;来调用可选的函数参数。 像:

dbo.myFnc(5, default)

答案 2 :(得分:0)

我不确定您指的是哪个SQL,但是可以重载UDF吗?

dbo.myFnc(Param1 int )

dbo.myFnc(Param1 int , Param2 int)

某些sql允许它有些不行。如果你没有,也许你可以尝试一些可以处理null作为输入的东西

create function func
(
    @in1 int,
    @in2 int
)
returns int
as
begin
    declare @count int

    select @count = count(*)
    from table
    where
        field1 = isnull(@in1, field1)
        and field2 = isnull(@in2, field2)

    return @count
end
go

所以你可以做类似

的事情
select func(null,9)