Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Identidade SQL com zeros preenchidos à esquerda


Como os outros já apontaram com razão - um INT nunca tem zeros à esquerda - ele apenas mantém o valor, isso é tudo (e isso é bom dessa maneira).

Se você precisar de alguma formatação adicional, sempre poderá adicionar uma coluna computada à sua tabela, algo como:
ALTER TABLE dbo.Identitytest
  ADD DisplayNumber AS  RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED

Desta forma, sua INT IDENTITY será usada como INT e sempre contém o valor numérico, enquanto DisplayNumber contém 001, 002, ... 014, 015, ..... e assim por diante - automaticamente, sempre atualizado.

Como é um campo persistente, agora faz parte da sua tabela e você pode consultá-lo e até colocar um índice nele para tornar as consultas mais rápidas:
SELECT value FROM dbo.IdentityTest WHERE DisplayNumber = '024'

E, claro, você pode usar praticamente qualquer formatação na definição de sua coluna computada, então você também pode adicionar um prefixo ou algo assim:
ALTER TABLE dbo.Identitytest
  ADD DisplayNumber 
      AS  'ABC-' + RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED

Portanto, neste caso, seu DisplayNumber seria ABC-001, ABC-002, ... e assim por diante.

Você obtém o melhor dos dois mundos - mantém sua INT IDENTITY, que é numérica e aumentada automaticamente pelo SQL Server, e pode definir um formato de exibição da maneira que desejar e disponibilizá-lo a qualquer momento.