Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Identità SQL con zeri riempiti iniziali

Come hanno già giustamente sottolineato gli altri - un INT non ha mai zeri iniziali - mantiene solo il valore, tutto qui (e va bene così).

Se hai bisogno di una formattazione aggiuntiva, puoi sempre aggiungere una colonna calcolata alla tua tabella, qualcosa come:

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

In questo modo, la tua INT IDENTITY verrà utilizzata come INT e conterrà sempre il valore numerico, mentre DisplayNumber contiene 001, 002, ... 014, 015, ..... e così via - automaticamente, sempre aggiornati.

Poiché si tratta di un campo persistente, ora fa parte della tabella e puoi eseguire query su di esso e persino inserire un indice per eseguire query più velocemente:

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

E, naturalmente, potresti usare praticamente qualsiasi formattazione nella definizione della tua colonna calcolata, quindi potresti anche aggiungere un prefisso o qualcosa del genere:

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

Quindi, in questo caso, il tuo DisplayNumber sarebbe ABC-001, ABC-002, ... e così via.

Ottieni il meglio da entrambi i mondi:mantieni la tua INT IDENTITY che è numerica e aumentata automaticamente da SQL Server e puoi definire un formato di visualizzazione come preferisci e averlo disponibile in qualsiasi momento.