【问题标题】:ID auto increment and update in SQL Server databaseSQL Server 数据库中的 ID 自动递增和更新
【发布时间】:2012-12-05 08:50:48
【问题描述】:

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

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

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

任何人都可以提供帮助将不胜感激。

【问题讨论】:

  • 你可以在你的表上定义一个你想要自动更新的触发器。
  • 如果 SSK 始终相同,请将其硬编码到您的程序或通过连接进行查询,并使用自动增量字段为您完成这项工作。比您可以编写的任何过程/触发器快得多。如果没有,则将列添加为varchar,并进行PK('ssk column','autoincrement column')

标签: sql sql-server database


【解决方案1】:

您可以使用基于自动增量列的计算列。应该从 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

【讨论】:

    【解决方案2】:

    您可以将右侧转换为 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 ), ... )
    

    但这是您可以采取的最肮脏的解决方案

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

    我建议您改用自动增量数据类型

    【讨论】:

    • 感谢您的回复,这是我想要的工作!但是现在我希望它可以是 auto incrementUPDATE 最后一个到数据库的数字,因为我有一个表是在输入新记录时存储最后一个 ID 的数字。多谢了~
    • 您能建议在SDK和0000000加入后如何使ID自动递增吗?非常感谢!
    • 作为:@next = coalesce( convert( int, right( max( id ), 7 ) ) + 1, 0)
    【解决方案3】:

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

    • 分解您的 ID,以便将 SSK 与号码分开

    • 增加数字

    • 然后用数字粘贴回 SSK

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-25
      • 2018-08-06
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 2017-03-24
      • 2015-07-05
      相关资源
      最近更新 更多