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自动增加,您可以随意定义显示格式并随时可用.
如果要显示number带有前导零的列,只需在SELECT语句中填充它.它是一个数字,它不会以前导零作为整数存储.
SELECT RIGHT('00000' + CAST([number] AS varchar(5)) , 3)
FROM IdentityTest
Run Code Online (Sandbox Code Playgroud)
这3是输出显示中您想要的总字符数.
| 归档时间: |
|
| 查看次数: |
16070 次 |
| 最近记录: |