Как создать уникальный инкрементный код сотрудника (шаблон: E0001, E0002, E0003, ...) в хранимой процедуре INSERT на сервере SQL? - PullRequest
0 голосов
/ 02 мая 2020

Я хочу создать уникальный код сотрудника во время вставки одной записи в хранимую процедуру INSERT.

При первом вызове процедуры код сотрудника будет сгенерирован как E0001, второй вызов сгенерирует E0002, .. .

Ожидаемый результат должен выглядеть следующим образом:

EmployeeCode    EmployeeName
-------------------------------
E0001           A
E0002           B
E0003           C
E0004           D
E0005           E
  '             '
  '             '
  '             '
E9999           ZZZ

Ответы [ 4 ]

0 голосов
/ 02 мая 2020

Используйте столбец идентификаторов, чтобы создать уникальный идентификатор. Затем используйте этот столбец для ссылок из других таблиц. Вы можете создать код, если вам нравится в качестве вычисляемого столбца:

create table employees (
    employeeId int identity(1, 1) primary key,
    employeeName varchar(255),
    employeeCode as (concat('E', format(employeeId, '00000')))
);

Здесь - это db <> скрипка.

0 голосов
/ 02 мая 2020

Вы можете встроить значение последовательности в настраиваемую строку по умолчанию и применить ее к проверочному ограничению. Вот так:

--drop table if exists Employee
--drop sequence seq_Employee
--go

create sequence seq_Employee
start with 1
increment by 1    
go

CREATE TABLE Employee
(
    EmployeeCode char(5) PRIMARY KEY 
        default 'E' + format((next value for seq_Employee),'0000' )
        check (EmployeeCode like 'E[0-9][0-9][0-9][0-9]'),
    EmployeeName VARCHAR(50) NOT NULL
)    
go

insert into Employee(EmployeeName)
values ('A'),('B'),('C'),('D'),('E')

select *
from Employee

Выходы

EmployeeCode EmployeeName
------------ --------------------------------------------------
E0001        A
E0002        B
E0003        C
E0004        D
E0005        E
0 голосов
/ 02 мая 2020
CREATE SEQUENCE dbo.Seq  
START WITH 1  
INCREMENT BY 1;  
GO  

DECLARE @T TABLE (
    E_CODE VARCHAR(50) PRIMARY KEY,
    E_Name VARCHAR(MAX)
);

INSERT INTO @T VALUES (CONCAT('E',FORMAT(NEXT VALUE FOR dbo.SEQ,'0000')),'A')
INSERT INTO @T VALUES (CONCAT('E',FORMAT(NEXT VALUE FOR dbo.SEQ,'0000')),'B')
INSERT INTO @T VALUES (CONCAT('E',FORMAT(NEXT VALUE FOR dbo.SEQ,'0000')),'C')

SELECT * FROM @T
0 голосов
/ 02 мая 2020

Используйте порядковый номер базы данных в вашей процедуре, чтобы предоставить вам значения. Чтобы добавить значение «E», объедините «E» с порядковым номером в запросе.

Используйте эту ссылку, чтобы понять концепцию порядкового номера базы данных в sql сервер

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