将参数的默认值传递给表值函数

时间:2013-03-28 19:27:16

标签: sql sql-server tsql

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作为参数值传递,就像可以对存储过程做的那样?

该函数确实编译。

1 个答案:

答案 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.)在创建和引用任何对象时,尤其是函数。