【问题标题】:How can we pass null parameter into SQL Function?我们如何将空参数传递给 SQL 函数?
【发布时间】:2021-12-27 13:54:15
【问题描述】:

大家好,我创建了一个缩放器函数,我希望将参数 @aCOURSENAME 传递为 null,但是当我尝试在没有参数的情况下执行它时,它会给出参数不足的错误。 为什么会发生,尽管我将 null 作为参数传递给函数

这是我的功能

CREATE FUNCTION UFN_XX_GETSTUCOUNT_ONCOURSE(@aCOURSENAME VARCHAR(20) = NULL)
RETURNS INT
AS
BEGIN 

    RETURN (SELECT  COUNT(SID) AS STUDENT  FROM BATCH B  
            INNER JOIN ENROLLMENT E 
            ON B.BATCHID = E.BATCHID
            INNER JOIN COURSE C 
            ON C.COURSEID = B.COURSEID
            WHERE COURSENAME = @aCOURSENAME
            GROUP BY COURSENAME)

END 

GO

SELECT DBO.UFN_XX_GETSTUCOUNT_ONCOURSE()

执行时不带参数会报参数不足的错误。

【问题讨论】:

  • 我觉得你还是需要传入null或者DEFAULT
  • 您的请求是关于什么 DBMS?这是 SQL Server 吗?请始终使用您的 DBMS 标记您的 SQL 请求。
  • 如果您的参数为空,那么您的WHERE 条件是错误的。应该是WHERE COURSENAME IS NULL。为了使其工作,您需要一个合并函数,它将 NULL 替换为有效值。

标签: sql sql-server database postgresql


【解决方案1】:

调用用户定义的 SQL 函数时不能省略参数(*)。是的,我知道那很臭,我不知道为什么会这样(可能是 30 年前 SQL 解析器中的一些遗留决定)。尽管如此,您要么必须显式传递 NULL:

SELECT DBO.UFN_XX_GETSTUCOUNT_ONCOURSE(NULL)

或“隐式”使用 DEFAULT:

SELECT DBO.UFN_XX_GETSTUCOUNT_ONCOURSE(DEFAULT)

是的,我们都讨厌这一点,并且几十年来一直在抱怨它。

(* -- 烦人的是,一些系统函数确实允许可选参数)

【讨论】:

  • 非常感谢 RBarryYoung。
猜你喜欢
  • 1970-01-01
  • 2012-09-15
  • 2015-10-30
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
相关资源
最近更新 更多