如何在mariaDB中使用正确的语法更改此代码?

时间:2018-12-17 13:02:02

标签: sql-server mariadb

我是这个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服务器版本相对应的手册以获取在'declare @lastval char(5)附近使用的正确语法     声明@i int     声明@newId char(5)

结果应该是这样的。 V0001,V0002

如何使此代码适用于mDb服务器?

1 个答案:

答案 0 :(得分:0)

此代码对Sql Server来说也很糟糕,因为它未能将增量/选择封装在事务中。要为Sql Server修复它,应将其更改为使用Identity列或(甚至更好)使用sequenceNEXT VALUE FOR

很酷的一点是,该序列在MySql / MariaDB中也有效。因此,要翻译此代码,请先创建序列:

CREATE SEQUENCE VacancySeq START WITH CurrentMaxValueHere INCREMENT BY 1;

然后更新该函数以从序列中提取:

return next value for VacancySeq

我知道这将丢失V和前导零...但是将它们存储为列值的一部分是错误的。这是一个 formatting 问题,格式化应尽可能在客户端而不是在数据库中进行。