sql >> Database >  >> RDS >> Sqlserver

SQL-identiteit met voorloopnullen opgevuld

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.



  1. Pymysql Cursor.fetchall() / Fetchone() Retourneert Geen

  2. Mysql-optimalisatie voor REGEXP

  3. Het meest recente contract voor elk account vinden

  4. Rails postgresql hoe het transactie-isolatieniveau in te stellen op serializable