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

标签 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 作为参数值传递,就像使用存储过程一样?

该函数确实可以编译。

最佳答案

调用函数时不能省略参数。这并不是你在语法上做错了什么,它只是 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. )创建和引用任何对象时,尤其函数。

关于sql - 将参数的默认值传递给表值函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15690464/

相关文章:

sql - t-sql中按日期范围分组

mysql - 计算不同折扣范围的产品

asp.net - 维护用户的最佳实践是什么? aspnet_Users 或新建用户表

sql-server - 如何避免在 SQL 中存储像 <option/> 这样的 XML <option></option>?

c# - 使用 C# 和 ASP.NET 以编程方式从 SQL Server 导入/导出数据

sql - 在动态 SQL 中使用 USE DATABASE_NAME 时不会更改数据库

mysql - 从组中选择最大元素列

sql - PostgreSQL/PostGIS 统计访问次数

mysql - SQL 多对多关系

.net - 使用非常长(10000+ 个字符)的字符串作为 SqlParameter 值