SQL Server数据库中的ID自动增量和更新

时间:2012-12-05 08:50:48

标签: sql sql-server database

在我的SQL Server数据库中,我将此作为我的ID,例如SSK0000001

我希望它在我的系统中自动递增,并且ID的最后一个数字,例如“1”(在另一个新记录之后它将成为SSK0000002)在我的SQL Server数据库中更新。

我知道可以通过在数据库中设置自动增量来完成,但现在我的IDnchar

任何人都可以提供帮助。

4 个答案:

答案 0 :(得分:2)

您可以使用基于自动增量列的计算列。应该从sql server 2005向上工作。

CREATE TABLE [dbo].[TEST1](
    [AUTO_ID] [int] IDENTITY(1,1) NOT NULL,
    [ID]  AS CAST(('SSK'+replace(str([AUTO_ID],(7),(0)),' ','0')) AS NCHAR(10)) PERSISTED,
    [NAME] [nvarchar](10) NULL

) ON [PRIMARY]

GO

INSERT INTO TEST1 (NAME) VALUES ('NAME1')
INSERT INTO TEST1 (NAME) VALUES ('NAME2')
INSERT INTO TEST1 (NAME) VALUES ('NAME3')

SELECT * FROM TEST1

答案 1 :(得分:1)

您可以将右侧转换为int并增加:

declare @next int
select @next = convert( int, right( max( id ), 7 ) )  + 1
from your table 

然后插入:

insert into ... (Id, ...)
values (   'SDK' + right( '0000000' + rtrim(ltrim( str( @next ) ) ), 7 ), ... )

但这是最强肮脏的解决方案,因为你可以采取:

  • 这会导致很多数据库锁(因为聚合函数)
  • 比自动增量最慢
  • 要保留很多代码。

我建议您转到自动增量数据类型

答案 2 :(得分:0)

我想到的第一个解决方案是

  • 展开您的ID,以便将SSK与数字

  • 分开
  • 增加数字

  • 然后用数字

  • 反击SSK

答案 3 :(得分:0)

我建议阅读这个相关的问题

Create custom "auto-increment" Compound Primary Key?

另一个想法是使用此解决方案撰写密钥

Set a custom identity value on a auto increment field

来自微软博客的建议

http://forums.asp.net/t/1410179.aspx/1

但我最喜欢的答案是不是最佳做法:

创建表以存储当前序列值 创建一个函数来获取和增加当前值 创建存储过程以修改当前序列值 创建触发器

这是MYSQL中的一个想法 http://en.latindevelopers.com/ivancp/2012/custom-auto-increment-values/

我希望有用