Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Identität mit führenden aufgefüllten Nullen

Wie die anderen bereits zu Recht darauf hingewiesen haben - ein INT hat niemals führende Nullen - es enthält nur den Wert, das ist alles (und das ist gut so).

Wenn Sie eine zusätzliche Formatierung benötigen, können Sie Ihrer Tabelle jederzeit eine berechnete Spalte hinzufügen, etwa so:

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

Auf diese Weise wird Ihre INT IDENTITY als INT verwendet und enthält immer den numerischen Wert, während DisplayNumber enthält 001, 002, ... 014, 015, ..... und so weiter - automatisch immer aktuell.

Da es sich um ein persistentes Feld handelt, ist es jetzt Teil Ihrer Tabelle, und Sie können es abfragen und sogar einen Index darauf setzen, um Abfragen zu beschleunigen:

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

Und natürlich könnten Sie fast jede Formatierung in der Definition Ihrer berechneten Spalte verwenden, also könnten Sie auch ein Präfix oder so etwas hinzufügen:

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

In diesem Fall also Ihre DisplayNumber wäre ABC-001, ABC-002, ... und so weiter.

Sie erhalten das Beste aus beiden Welten - Sie behalten Ihre INT IDENTITY, die numerisch ist und vom SQL Server automatisch erhöht wird, und Sie können ein Anzeigeformat beliebig definieren und jederzeit verfügbar haben.