Som de andra redan med rätta påpekat - ett INT har aldrig inledande nollor - det håller bara värdet, det är allt (och det är bra så).
Om du behöver ytterligare formatering kan du alltid lägga till en beräknad kolumn i tabellen, något som:
ALTER TABLE dbo.Identitytest
ADD DisplayNumber AS RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED
På så sätt kommer din INT IDENTITY att användas som en INT och innehåller alltid det numeriska värdet, medan DisplayNumber
innehåller 001, 002, ... 014, 015, .....
och så vidare - automagiskt, alltid uppdaterad.
Eftersom det är ett beständigt fält är det nu en del av din tabell, och du kan fråga efter det och till och med sätta ett index på det för att göra frågorna snabbare:
SELECT value FROM dbo.IdentityTest WHERE DisplayNumber = '024'
Och naturligtvis kan du använda nästan vilken formatering som helst i definitionen av din beräknade kolumn, så du kan också lägga till ett prefix eller något:
ALTER TABLE dbo.Identitytest
ADD DisplayNumber
AS 'ABC-' + RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED
Så i det här fallet, ditt DisplayNumber
skulle vara ABC-001, ABC-002, ...
och så vidare.
Du får det bästa av två världar - du behåller din INT IDENTITY som är numerisk och automatiskt ökad av SQL Server, och du kan definiera ett visningsformat som du vill och ha det tillgängligt när som helst.