У меня есть существующая Хранимая процедура, которая генерирует идентификатор сотрудника. Идентификатор сотрудника имеет формат EPXXXX, EP, а затем 4 числовые значения. Я хочу, чтобы моя хранимая процедура была сокращена.Auto increment Alphanumeric ID в MSSQL
приведены в таблице (tblEmployee) выше. Ниже приведена хранимая процедура для ввода нового сотрудника с новым номером сотрудника. Процесс состоит в том, что я должен получить последний идентификатор сотрудника, получить последние 4 цифры (это число), преобразовать его в целое число, добавить 1 для увеличения, проверить, не меньше ли 10, 100 или 1000 или равно/больше чем 1000, добавьте префикс перед вставкой новых записей в таблицу.
create procedure NewEmployee
@EmployeeName VARCHAR(50)
AS
BEGIN
SET NOCOUNT ON
DECLARE @lastEmpID as VARCHAR(6)
SET @lastEmpID =
(
SELECT TOP 1 Employee_ID
FROM tblEmployee
ORDER BY Employee_ID DESC
)
DECLARE @empID as VARCHAR(4)
SET @empID =
(
SELECT RIGHT(@lastEmpID, 4)
)
DECLARE @numEmpID as INT
@numEmpID =
(
SELECT CONVERT(INT, @empID) + 1
)
DECLARE @NewEmployeeID as VARCHAR(6)
IF @numEmp < 10
SET @NewEmployee = SELECT 'EP000' + CONVERT(@EmpID)
IF @numEmp < 100
SET @NewEmployee = SELECT 'EP00' + CONVERT(@EmpID)
IF @numEmp < 1000
SET @NewEmployee = SELECT 'EP0' + CONVERT(@EmpID)
IF @numEmp >= 1000
SET @NewEmployee = SELECT 'EP' + CONVERT(@EmpID)
INSERT INTO tblEmployee(Employee_ID, Name)
VALUES (@NewEmployeeID, @EmployeeName)
END
Было бы гораздо легче хранить числовую часть в колонке самого по себе (возможно, 'IDENTITY' столбец) и затем вычисляемый столбец, который производит это отформатированное значение. В таком сценарии, есть ли у вас также столбец для хранения префикса или просто жесткий код, он для «EP» является дизайнерским решением. –