如何向SQL函数传递null参数?参数默认值为null无参调用报错如何解决
问题原因与解决方法
一、参数不足报错的直接原因
SQL Server的标量用户自定义函数存在语法限制:即使你已经给参数设置了默认值,调用时也不能直接空括号省略参数,必须显式传入DEFAULT关键字来触发默认值生效。
你只需要把调用语句修改为以下形式即可解决参数不足的报错:
SELECT DBO.UFN_XX_GETSTUCOUNT_ONCOURSE(DEFAULT)
二、需要注意的隐藏逻辑问题
就算调整了调用语法,你当前的函数逻辑在传入NULL参数时也不会返回预期结果:
SQL中=运算符无法匹配NULL值,COURSENAME = NULL的判断结果永远为UNKNOWN,不会匹配到任何行,最终函数会返回空值。
你可以根据实际需求调整WHERE条件:
- 如果需求是参数为NULL时统计所有课程的总选课人数,可以修改为:
同时需要去掉原查询中的WHERE @aCOURSENAME IS NULL OR COURSENAME = @aCOURSENAMEGROUP BY COURSENAME,否则匹配到多门课程时标量函数会因为返回多个值报错。 - 如果需求是参数为NULL时统计课程名为NULL的记录的选课人数,可以修改为:
WHERE COURSENAME = @aCOURSENAME OR (COURSENAME IS NULL AND @aCOURSENAME IS NULL)
内容的提问来源于stack exchange,提问作者Arvind Singh
相关产品推荐
相关产品推荐

