Zoals de anderen al terecht hebben opgemerkt - een INT heeft nooit voorloopnullen - het heeft gewoon de waarde, dat is alles (en dat is goed op die manier).
Als je wat extra opmaak nodig hebt, kun je altijd een berekende kolom aan je tabel toevoegen, zoiets als:
ALTER TABLE dbo.Identitytest
ADD DisplayNumber AS RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED
Op deze manier wordt uw INT IDENTITY gebruikt als een INT en bevat deze altijd de numerieke waarde, terwijl DisplayNumber
bevat 001, 002, ... 014, 015, .....
enzovoort - automatisch, altijd up-to-date.
Omdat het een persistent veld is, maakt het nu deel uit van uw tabel, en u kunt er query's op uitvoeren en er zelfs een index op plaatsen om query's sneller te maken:
SELECT value FROM dbo.IdentityTest WHERE DisplayNumber = '024'
En natuurlijk zou je zowat elke opmaak kunnen gebruiken in de definitie van je berekende kolom, dus je zou ook een voorvoegsel of zoiets kunnen toevoegen:
ALTER TABLE dbo.Identitytest
ADD DisplayNumber
AS 'ABC-' + RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED
Dus in dit geval uw DisplayNumber
zou zijn ABC-001, ABC-002, ...
enzovoort.
U krijgt het beste van twee werelden - u behoudt uw INT IDENTITEIT, die numeriek is en automatisch wordt verhoogd door SQL Server, en u kunt een weergave-indeling definiëren zoals u dat wilt en deze op elk moment beschikbaar hebben.