Я работаю над проектом для управления классом и курсом. Я хочу создать функцию, которая автоматически создает код курса на основе имени курса, а затем добавляет число в зависимости от того, существует ли уже название курса с такими же первыми 4 символами.
Вот как выглядит моя функциянапример:
CREATE FUNCTION [dbo].[fxGenerateCourseCode]
(@course_name VARCHAR(50))
RETURNS VARCHAR(8)
AS
BEGIN
DECLARE @course_code VARCHAR(8), @count_course INT
SET @count_course = (SELECT COUNT(1) FROM dbo.COURSE_TB
WHERE SUBSTRING(course_name, 1, 4) = SUBSTRING(@course_name, 1, 4)) + 1
SELECT @course_code = UPPER(SUBSTRING(@course_name, 1, 4)) + ' - ' + '00' + CAST(@count_course AS VARCHAR)
RETURN @course_code
END
Проблема в том, что всякий раз, когда я выполняю эту функцию, она не возвращает правильные значения счетчика и также не включает 00
.
Например, выполнение этого:
SELECT dbo.fxGenerateCourseCode('french')
возвращает FREN-0
вместо FREN-001
(что я и ожидаю).
Однако, когда я выполняюкод вручную, он дает мне ожидаемый результат:
DECLARE @course_code VARCHAR(8), @count_course INT, @course_name VARCHAR(50)
SET @course_name = 'french'
SET @count_course = (SELECT COUNT(1) + 1 FROM dbo.PARAMETRES_COURS
WHERE SUBSTRING(nom_cours, 1, 4) = SUBSTRING(@course_name, 1, 4))
SELECT course_code = UPPER(SUBSTRING(@course_name, 1, 4)) + ' - ' + '00' + CAST(@count_course AS VARCHAR)
Результат: FREN-001
.
Я попытался изменить способ написания функции с небольшим результатом. Может кто-нибудь помочь мне узнать, откуда возникла проблема? Я что-то не так делаю в функции?
Спасибо