带有前导填充零的SQL标识

Inn*_*ova 8 sql sql-server padding identity-column

我在表格中将列标记为Identity

create table Identitytest(
    number int  identity(1,001) not null,
    value varchar(500)
)
Run Code Online (Sandbox Code Playgroud)

我需要将标识列增加为001,002,003,等等.

数据库显示它正在插入1,2,3等等.

如何才能做到这一点?

mar*_*c_s 15

正如其他人已经正确地指出的那样 - 一个INT永远不会有前导零 - 它只是保持价值,这就是全部(这就是好的方式).

如果您需要一些额外的格式,您可以随时向表中添加计算列,例如:

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

这样,您的INT IDENTITY将用作INT并始终包含数值,而DisplayNumber包含001, 002, ... 014, 015, .....等等 - 自动,始终是最新的.

由于它是一个持久化字段,它现在是表的一部分,您可以对其进行查询,甚至可以在其上添加索引以加快查询速度:

SELECT value FROM dbo.IdentityTest WHERE DisplayNumber = '024'
Run Code Online (Sandbox Code Playgroud)

当然,您可以在计算列的定义中使用任何格式,因此您还可以添加前缀或其他内容:

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

所以在这种情况下,你DisplayNumber会是ABC-001, ABC-002, ...等等.

您可以获得两全其美的效果 - 保持您的INT IDENTITY是数字并由SQL Server自动增加,您可以随意定义显示格式并随时可用.


p.c*_*ell 6

如果要显示number带有前导零的列,只需在SELECT语句中填充它.它是一个数字,它不会以前导零作为整数存储.

SELECT RIGHT('00000' + CAST([number] AS varchar(5)) , 3)
FROM IdentityTest
Run Code Online (Sandbox Code Playgroud)

3是输出显示中您想要的总字符数.