web-dev-qa-db-fra.com

Comment générer automatiquement un identifiant unique en SQL comme UID12345678?

Je souhaite générer automatiquement un identifiant unique auquel est associé un code prédéfini. 

ex: 

UID12345678
CUSID5000

J'ai essayé le type de données uniqueidentifier mais il génère un identifiant qui ne convient pas à un identifiant utilisateur.

Quelqu'un a des suggestions?

9
Nishantha

À mon avis, la seule solution viable consiste à utiliser 

  • une colonne ID INT IDENTITY(1,1) pour que SQL Server gère l'incrémentation automatique de votre valeur numérique
  • une colonne calculée, persistée pour convertir cette valeur numérique en la valeur dont vous avez besoin

Alors essayez ceci:

CREATE TABLE dbo.tblUsers
  (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
   UserID AS 'UID' + RIGHT('00000000' + CAST(ID AS VARCHAR(8)), 8) PERSISTED,
   .... your other columns here....
  )

Maintenant, chaque fois que vous insérez une ligne dans tblUsers sans spécifier de valeur pour ID ou UserID:

INSERT INTO dbo.tblUsersCol1, Col2, ..., ColN)
VALUES (Val1, Val2, ....., ValN)

alors SQL Server augmentera automatiquement et en toute sécurité votre valeur ID, et UserID contiendra des valeurs telles que UID00000001, UID00000002, ...... etc. - automatiquement, en toute sécurité, de manière fiable, sans duplication.

Update: la colonne UserID est calculée - mais OF COURSE a toujours un type de données, comme le montre rapidement l'explorateur d'objets:

 enter image description here

27
marc_s
CREATE TABLE dbo.tblUsers
(
    ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
    UserID AS 'UID' + RIGHT('00000000' + CAST(ID AS VARCHAR(8)), 8) PERSISTED, 
    [Name] VARCHAR(50) NOT NULL,
)

marc_s's Answer Snap

la réponse de marc_s

2
Nishantha

Si vous voulez ajouter l'id manuellement, vous pouvez utiliser,

PadLeft () ou String.Format ()

string id;
char x='0';
id=id.PadLeft(6, x);
//Six character string id with left 0s e.g 000012

int id;
id=String.Format("{0:000000}",id);
//Integer length of 6 with the id. e.g 000012

Ensuite, vous pouvez ajouter ceci avec UID.

0
Nishantha