我正在寻找一个解决方案,如何使用可选参数创建SQL UDF。
函数的伪代码,其中Param1是必需的,Param2可以填充(但不需要):
dbo.myFnc(Param1 int [, Param2 int])
有没有办法创建这个功能?对于现有的内置样本,请STR function
STR ( float_expression [ , length [ , decimal ] ] )
答案 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 [ ) ]
[ ; ]
所以你可以这样做:
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)