8

我已在表中将一列标记为身份

create table Identitytest(
    number int  identity(1,001) not null,
    value varchar(500)
)

我需要将标识列递增为001,002,003等。

数据库显示它正在插入 as1,2,3等。

如何才能做到这一点?

4

7 回答 7

15

正如其他人已经正确指出的那样 - INT 从来没有前导零 - 它只是保持价值,仅此而已(这样很好)。

如果你需要一些额外的格式,你总是可以在你的表中添加一个计算列,比如:

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

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

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

SELECT value FROM dbo.IdentityTest WHERE DisplayNumber = '024'

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

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

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

您将获得两全其美的优势 - 您保留您的 INT IDENTITY,它是数字的并由 SQL Server 自动增加,您可以以任何您喜欢的方式定义显示格式并随时可用。

于 2010-08-07T06:52:31.540 回答
6

如果你想number用前导零显示你的列,只需在你的SELECT语句中填充它。这是一个数字,它不会将前导零存储为整数。

SELECT RIGHT('00000' + CAST([number] AS varchar(5)) , 3)
FROM IdentityTest

3是您希望在输出显示中总计的字符数。

于 2010-08-07T06:10:11.197 回答
3

如果您需要自动递增的数字(只能是数字)和数字的字母表示形式,您可以考虑查看计算列。

这里有一些链接可以帮助您:

于 2010-08-07T06:51:32.260 回答
2

你为什么需要那个?作为一个整数,001 与 1 相同。如果您想要的是用于显示或其他目的,请创建另一列并在那里执行您的工作(您可以将其作为表上触发器的一部分,在插入时,看起来在新插入的行中,并在列中适当地创建条目。

于 2010-08-07T05:52:42.347 回答
1

我有一个存储整数的表,但用户希望看到它是 XXX,即使它有零,所以我写了这段代码

declare @a int
set @a=1


select replicate('0',3-len(@a))+ cast(@a as varchar(4))
于 2010-08-09T13:55:31.027 回答
1

这是另一种方法:

create table TEST_T (ui int NOT NULL identity, name varchar(10))
insert into TEST_T values ( 'FRED' )
select NAME, ui, RIGHT('0000' + LTRIM(STR(ui)), 4) as ui_T from TEST_T
go
/* NOTE: A view could be created with a calculated column instead of the identity column. */
create view TEST_V as select NAME, RIGHT('0000' + LTRIM(STR(ui)), 4) as ui_V from TEST_T go
go
select * from TEST_V
drop view TEST_V
drop table TEST_T

没有像向表中添加列那样多的数据重复(?),并且不需要在 select 语句中指定列。

于 2011-10-13T10:15:54.757 回答
0

我需要将标识列递增为 001,002,003 等。

数据库显示它正在插入为 1、2、3 等。

SQL 数据库存储值,而不是用于编写这些值的文字。 002 2。就像1 + 1 2。您希望SELECT 1 + 1 显示字符串“1 + 1”而不是 2?

如果要将前导零存储在列中,则必须使用字符类型。但是你不能使用AUTOINCREMENT/ IDENTITY

您可能真正想要的是类似于printf("%03d", number)从数据库读取的程序中的内容。

于 2010-08-07T07:03:11.473 回答