Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Identité SQL avec des zéros complétés en tête

Comme les autres l'ont déjà souligné à juste titre - un INT n'a jamais de zéros non significatifs - il contient juste la valeur, c'est tout (et c'est bien ainsi).

Si vous avez besoin d'une mise en forme supplémentaire, vous pouvez toujours ajouter une colonne calculée à votre tableau, par exemple :

ALTER TABLE dbo.Identitytest
  ADD DisplayNumber AS  RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED

De cette façon, votre INT IDENTITY sera utilisé comme un INT et contiendra toujours la valeur numérique, tandis que DisplayNumber contient 001, 002, ... 014, 015, ..... et ainsi de suite - automatiquement, toujours à jour.

Puisqu'il s'agit d'un champ persistant, il fait maintenant partie de votre table, et vous pouvez y interroger, et même y mettre un index pour accélérer les requêtes :

SELECT value FROM dbo.IdentityTest WHERE DisplayNumber = '024'

Et bien sûr, vous pouvez utiliser à peu près n'importe quel formatage dans la définition de votre colonne calculée, vous pouvez donc également ajouter un préfixe ou quelque chose :

ALTER TABLE dbo.Identitytest
  ADD DisplayNumber 
      AS  'ABC-' + RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED

Donc dans ce cas, votre DisplayNumber serait ABC-001, ABC-002, ... et ainsi de suite.

Vous obtenez le meilleur des deux mondes - vous conservez votre INT IDENTITY qui est numérique et automatiquement augmentée par SQL Server, et vous pouvez définir un format d'affichage comme bon vous semble et le rendre disponible à tout moment.