工号前缀非数字在新增员工时怎么自动新增工号

在进行数据读取时,表的主键至关重要,如果我们通过网页新增数据可以利用max函数进行+1解决主键重复问题如果主键并不是INTEGER应该怎么办呢,?

比如工号SA001,SA002,BD001,BD002...
我们在系统制作的时候通常会依据不同科室进行不同子系统的划分,所以工号的开头科室代码应该是一致的,不一致的话我们也可以通过sql语句like再进行匹配,以下代码是科室子系统的查询语句就可以解决上述问题:

#region 生成用户工号
public string? GetMaxNo(DbTransaction dbTrans, out string strErrorMessage)
{
    strErrorMessage = string.Empty;
    string sqlcmd = string.Empty;

    try
    {
        DbCommand dbCommand;
        DataTable dt = new DataTable();
        switch (global.DBType)
        {
            case global.DbType.Oracle:
                #region Oracle
                OracleClient oracleClient = new OracleClient(dbTrans);
                // 查询符合格式的最大工号
                sqlcmd = @"
                            SELECT MAX(SUBSTR(EMP_NO, 2)) AS MAX_ID 
                            FROM SCOTT.ZYHZGLXT_USER 
                            WHERE EMP_NO LIKE 'S_____' AND LENGTH(EMP_NO) = 6";
                dbCommand = oracleClient.GetCommand(sqlcmd, dbTrans);
                dt = oracleClient.ExecuteDataTable(dbCommand);
                break;
                #endregion
        }

        // 获取当前最大工号的数字部分
        string maxId = dt.Rows.Count > 0 ? dt.Rows[0]["MAX_ID"].ToString() : "00000";

        // 将数字部分转换为整数
        int currentNumber = int.Parse(maxId);

        // 生成下一个工号
        int nextNumber = currentNumber + 1;
        string nextId = $"S{nextNumber:D5}"; // D5 表示数字占5位,不足部分补零

        return nextId;
    }
    catch (Exception ex)
    {
        Log.Error(System.Reflection.MethodBase.GetCurrentMethod()?.DeclaringType?.FullName + "." + System.Reflection.MethodBase.GetCurrentMethod()?.Name, sqlcmd);
        strErrorMessage = "生成用户序号出错:" + ex.Message;
        return null;
    }
}
#endregion

如果有更多方法欢迎评论,如果有错误欢迎指出,本人是新人作者希望得到大家的指导!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值