这个问题在这里已经有答案了:
mssql中自动递增的字母数字id(4个答案)11个月前关门了。我想在我的sql表中自动生成一个增量值,但是我希望它每次都读取前面的数据和str+int。例如;0001 0002 0003。待续。你能帮忙吗
h9vpoimq1#
你可以用很多方法来做到这一点。第一种方法是使用计算列规范的自动化方法。您可以添加一个自动增量列,也可以创建另一个基于该自动增量列计算的列。例如,可以创建用户表:
CREATE TABLE [dbo].[UserTable]( [ID] [int] IDENTITY(1,1) NOT NULL, [UserNo] AS ('ABC'+ RIGHT('0000' + CAST(Id AS VARCHAR(4)), 4)) PERSISTED, [FirstName] VARCHAR(50), [LastName] VARCHAR(50), CONSTRAINT [PK_UserTable] PRIMARY KEY ([ID] ASC))
CREATE TABLE [dbo].[UserTable](
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserNo] AS ('ABC'+ RIGHT('0000' + CAST(Id AS VARCHAR(4)), 4)) PERSISTED,
[FirstName] VARCHAR(50),
[LastName] VARCHAR(50),
CONSTRAINT [PK_UserTable] PRIMARY KEY ([ID] ASC)
)
现在可以向表中添加数据:
INSERT INTO [dbo].[UserTable] ([FirstName],[LastName]) VALUES ('sample name','sample family name')
INSERT INTO [dbo].[UserTable] ([FirstName],[LastName])
VALUES ('sample name','sample family name')
dffbzjpn2#
检查序列是否可以被利用(由于您的数据有限,我假设您有sqlserver作为您的dbms)
Create Table T (ColABCIncremtnt varchar(20), Col2 int, Col3 datetime)CREATE SEQUENCE dbo.Id AS INT START WITH 1 INCREMENT BY 1 MINVALUE 0 NO MAXVALUEInsert Into T (ColABCIncremtnt,Col2,Col3)Select 'ABC000' + Convert(varchar(10), next value for dbo.Id), 43,getdate() Insert Into T (ColABCIncremtnt,Col2,Col3)Select 'ABC000' + Convert(varchar(10), next value for dbo.Id), 72,getdate() Insert Into T (ColABCIncremtnt,Col2,Col3)Select 'ABC000' + Convert(varchar(10), next value for dbo.Id), 36,getdate() Select * from T
Create Table T (ColABCIncremtnt varchar(20), Col2 int, Col3 datetime)
CREATE SEQUENCE dbo.Id AS INT
START WITH 1 INCREMENT BY 1 MINVALUE 0 NO MAXVALUE
Insert Into T (ColABCIncremtnt,Col2,Col3)
Select 'ABC000' + Convert(varchar(10), next value for dbo.Id), 43,getdate()
Select 'ABC000' + Convert(varchar(10), next value for dbo.Id), 72,getdate()
Select 'ABC000' + Convert(varchar(10), next value for dbo.Id), 36,getdate()
Select * from T
如果要将序列嵌入到表中
ALTER TABLE dbo.TADD CONSTRAINT Cnstrnt_SeqDEFAULT FORMAT((NEXT VALUE FOR dbo.ID),'ABC000#') FOR ColABCIncremtnt;Insert Into T (Col2,Col3) values(1,getdate()), (2,getdate()),(3,getdate())Select * from T
ALTER TABLE dbo.T
ADD CONSTRAINT Cnstrnt_Seq
DEFAULT FORMAT((NEXT VALUE FOR dbo.ID),'ABC000#') FOR ColABCIncremtnt;
Insert Into T (Col2,Col3) values
(1,getdate()),
(2,getdate()),
(3,getdate())
2条答案
按热度按时间h9vpoimq1#
你可以用很多方法来做到这一点。第一种方法是使用计算列规范的自动化方法。您可以添加一个自动增量列,也可以创建另一个基于该自动增量列计算的列。例如,可以创建用户表:
现在可以向表中添加数据:
dffbzjpn2#
检查序列是否可以被利用(由于您的数据有限,我假设您有sqlserver作为您的dbms)
如果要将序列嵌入到表中