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

Sql 将参数的默认值传递给表值函数,sql,sql-server,tsql,Sql,Sql Server,Tsql,是我的功能,当它完全完成时,它会有意义。如果我尝试运行这个查询,但没有提供两个参数,它将失败。我有与存储过程相同的代码,如果只输入一个参数,它工作正常,并将第二个参数赋值为null。如果没有提供参数,是否有一种方法可以像存储过程那样将null作为参数值传递 函数不会编译。调用函数时不能忽略参数。这并不是语法上的错误,只是SQL Server不支持它。存储过程有可选参数,但函数没有 但是,您可以提供默认值: create function Xtest (@d1 varchar(3)=null ,@

是我的功能,当它完全完成时,它会有意义。如果我尝试运行这个查询,但没有提供两个参数,它将失败。我有与存储过程相同的代码,如果只输入一个参数,它工作正常,并将第二个参数赋值为null。如果没有提供参数,是否有一种方法可以像存储过程那样将
null
作为参数值传递


函数不会编译。

调用函数时不能忽略参数。这并不是语法上的错误,只是SQL Server不支持它。存储过程有可选参数,但函数没有

但是,您可以提供
默认值

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
,则可以执行以下操作:

SELECT code FROM dbo.Xtest(default, default);

在创建和引用任何对象,尤其是函数时(在本例中为
dbo.
),我知道必须有一种方法。你知道SPROC和TVF行为不同的原因吗?@wootscootinboogie我不知道为什么,不,对不起。相关的,至少有一个可能是傻瓜:。。。
SELECT code FROM dbo.Xtest(NULL, NULL);