sql-server - studio - sql server tutorial




Dans SQL Server, comment générer un ID de clé primaire à incrémentation automatique comprenant une année, un caractère spécial et un numéro de série séquentiel? (2)

Je rencontre ce type de tâche de codage SQL avancée, telle que la génération d’un identifiant de clé primaire à incrémentation automatique composé d’une année, d’un caractère spécial et d’un numéro de série séquentiel.

Quelque chose comme ça.

2018-00000
2018-00001

etc., etc...

J'ai à peine fait ce code

CREATE TABLE [dbo].[STUDENT]
(
    [Stud_ID] [varchar](10) NOT NULL,
    [Stud_LName] [varchar](100) NOT NULL,
    [Stud_FName] [varchar](100) NOT NULL,
    [Stud_MName] [varchar](100) NOT NULL,
)

Ça va sortir comme ça

Stud_ID      Stud_LName   Stud_FName   Stud_MName  
--------------------------------------------------
2018-00000   Doe          Jane         Stack       
2018-00001   Doe          John         Stack  

Voici une solution complète. Notez que c'est exactement la même chose que le doublon que j'ai marqué - Schéma de base de données, incrémentation automatique - Des détails différents.

CREATE TABLE [dbo].[STUDENT]
(
    [ID] int identity(1,1) PRIMARY KEY,
    [Stud_LName] [varchar](100) NOT NULL,
    [Stud_FName] [varchar](100) NOT NULL,
    [Stud_MName] [varchar](100) NOT NULL
)
GO

CREATE FUNCTION dbo.GetSudentId
(
    @id int
)
RETURNS varchar(10)
AS
BEGIN
    RETURN Concat(Year(Getdate()), '-', RIGHT(Concat('0000', (SELECT COUNT(*) FROM STUDENT WHERE id < @Id)), 6))
END
GO

ALTER TABLE [dbo].[STUDENT]
    ADD Stud_ID AS (dbo.GetSudentId(Id))
GO

Veuillez noter que la clé primaire de la table doit toujours être la colonne identity (comme indiqué dans le script) car la colonne calculée ne peut pas être la clé primaire.


Vous devriez passer par la colonne Calculée, qui aide à gérer votre conception. S'il vous plaît se référer ci-dessous exemple.

CREATE TABLE #test(id INT IDENTITY(1,1) PRIMARY KEY, 
Stud_ID AS CAST(YEAR(GETDATE()) as VARCHAR(4)) +'-'+ REPLICATE('0', 5 - DATALENGTH(CAST(id as VARCHAR(10))))+ CAST(id as VARCHAR(10)), 
Stud_LName VARCHAR(100), 
Stud_FName VARCHAR(100), 
Stud_MName VARCHAR(100)
)


INSERT INTO #test(Stud_LName, Stud_FName, Stud_MName)
values
('lname_1' , 'fname 1', 'mname 1'),
('lname_2' , 'fname 2', 'mname 2'),
('lname_3' , 'fname 3', 'mname 3'),
('lname_4' , 'fname 4', 'mname 4'),
('lname_5' , 'fname 5', 'mname 5'),
('lname_6' , 'fname 6', 'mname 6'),
('lname_7' , 'fname 7', 'mname 7'),
('lname_8' , 'fname 8', 'mname 8'),
('lname_9' , 'fname 9', 'mname 9'),
('lname_10', 'fname 10', 'mname 10')


select * from #test;


DROP TABLE #test;




sql-server