Как изменить этот код с правильным синтаксисом в mariaDB? - PullRequest
0 голосов
/ 17 декабря 2018

Я новичок в этой функции sql.Я хочу настраиваемое поле с автоматическим приращением со следующей функцией SQL.

CREATE FUNCTION nextvacancy() returns char(5) as begin
declare @lastval char(5)
declare @i int
declare @newId char(5)

set @lastval = (select max(vacancyId) from vacancy)

if @lastval IS NULL 
    set @lastval = 'V0000'

    set @i = right(@lastval,4) + 1

    set @newId = 'V' + right('000' + convert(varchar(10),@i),4)

return @newId end

Это нормально работает с mssql, но на сервере mariaDb выдает эту ошибку.

# 1064 - У вас естьошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса, который нужно использовать рядом с 'введите' @lastval char (5) объявите @i int объявите @newId char (5)

Результат должен быть следующимэтот. V0001, V0002

Как мне адаптировать этот код к серверу mDb?

1 Ответ

0 голосов
/ 17 декабря 2018

Этот код был очень плохой и для Sql Server, потому что он не смог инкапсулировать приращение / выбор в транзакции.Чтобы исправить это для Sql Server, его следует изменить на использование столбца идентификаторов или (что еще лучше) sequence и NEXT VALUE FOR .

И классная вещь - последовательность работает и в MySql / MariaDB.Итак, чтобы перевести этот код, сначала создайте последовательность:

CREATE SEQUENCE VacancySeq START WITH CurrentMaxValueHere INCREMENT BY 1;

Затем обновите функцию, чтобы извлечь из последовательности:

return next value for VacancySeq

Я знаю, что будет отсутствовать Vи ведущие нули ... но было бы ошибкой хранить их как часть значения столбца.Это проблема форматирования , и форматирование должно выполняться как можно больше на клиенте, а не в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...