sql-server

En SQL Server, ¿cómo genero un ID de clave primaria de incremento automático que consta de año, un carácter especial y un número de serie secuencial?



sql-server (2)

Aquí hay una solución completa. Tenga en cuenta que es exactamente el mismo que el duplicado que he marcado - Esquema de base de datos, aumento automático - Solo detalles diferentes.

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

Tenga en cuenta que la clave principal de la tabla aún debe ser la columna de identity (como se muestra en el script) ya que la columna calculada no puede ser la clave principal.

Me encuentro con este tipo de tarea avanzada de codificación SQL, como generar una ID de clave primaria de incremento automático que consta de un año, un carácter especial y una serie secuencial no.

Algo como esto.

2018-00000 2018-00001

y así sucesivamente ...

Apenas hice este código

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, )

Eso saldrá así

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


Debería pasar por la columna Computado, que ayuda a administrar su diseño. Por favor, consulte el siguiente ejemplo.

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;