Как мы можем передать нулевой параметр в функцию SQL?

#sql #sql-server #database #postgresql

Вопрос:

Привет всем, я создал функцию масштабирования, в которой я хочу передать параметр @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()

без параметра, когда я выполняю, он выдает ошибку недостаточного параметра.

Комментарии:

1. Я думаю, что вам все равно нужно будет пройти null или DEFAULT

2. О какой СУБД идет речь в вашем запросе? Это SQL-сервер? Пожалуйста, всегда помечайте свои SQL-запросы своей СУБД.

3. Если ваш параметр равен нулю, то ваше WHERE условие неверно. Так и должно быть WHERE COURSENAME IS NULL . Для того, чтобы это сработало, вам нужна функция объединения NULL , которая заменит действительное значение.

Ответ №1:

Вы не можете опускать параметры при вызове определяемых пользователем функций SQL(*). Да, я знаю, что это воняет, и я понятия не имею, почему это так (вероятно, какое-то устаревшее решение в синтаксическом анализаторе SQL, принятое 30 лет назад). Тем не менее, вы либо должны явно передать значение NULL:

 SELECT DBO.UFN_XX_GETSTUCOUNT_ONCOURSE(NULL)  

или «неявно» , используя значение ПО УМОЛЧАНИЮ:

 SELECT DBO.UFN_XX_GETSTUCOUNT_ONCOURSE(DEFAULT)  

И да, мы все ненавидим это и жалуемся на это десятилетиями.

(* — досадно, но некоторые системные функции допускают необязательные аргументы)

Комментарии:

1. Большое Тебе спасибо, Рбарриен .