create function Xtest
(@d1 varchar(3)=null
,@d2 varchar(3)=null)
returns table
as
return
with code_list(code_pattern)
as
(
select x.code_pattern
from (values (@d1),(@d2)) as x(code_pattern)
where x.code_pattern is not null
),y
as
(
select substring(code,1,3) as code
from tblicd
where substring(code,1,3) in
(
select * from code_list
)
)
select * from y
是我的功能,当它完全完成时才有意义。如果我尝试运行此查询并且我不提供两个参数,则会失败。我有一个与存储过程相同的代码,如果我只输入一个参数,它工作正常,并指定第二个参数null。如果没有提供参数,有没有办法可以将null
作为参数值传递,就像可以对存储过程做的那样?
该函数确实编译。
答案 0 :(得分:39)
调用函数时,不能省略参数。这不是你在语法上做错的事情,它只是不被SQL Server支持。存储过程具有可选参数,但功能没有。
但是,您可以提供default
:
SELECT code FROM dbo.Xtest(default, default);
或者在这种情况下,如果您知道默认值为NULL
,则可以执行以下操作:
SELECT code FROM dbo.Xtest(NULL, NULL);
同时please always use the schema prefix(在本例中为dbo.
)在创建和引用任何对象时,尤其是函数。