使用insert语句SQL将数字递增1

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用insert语句SQL将数字递增1相关的知识,希望对你有一定的参考价值。

我试图手动将记录添加到SQL表但是在此表中我们有一个名为Trackseq的列,此列确定如何在CMS系统上查看数据。最高的TrackSeq将首先出现。我想手动添加一个新行,但我希望代码根据CLNTID检查当前trackSeq是什么,并添加一个。因此,如果最后一条记录的trackseq为10,我希望新记录以11的trackse进入。这是我的代码。

INSERT INTO tbl_CommTracking   (    CLNTID,
        TRACKSEQ,
        COMMDATE,
        COMMTIME,
    PRODCODE,
    COMMTYPE,
        EMPLOYEEID,
        COMMDETAILS,
        COMMSTATUS)
VALUES ('0000005566','999',GETDATE(),GETDATE(),'BS','Note','0000000786','Testing a manual import','A')

谢谢

答案

假设TRACKSEQ是一种数字格式,您可以读取实际的最高值并将其存储在变量中以在insert语句中使用。

请注意,在高并发性的情况下,您可能希望同步此执行以避免重复的@ts值。如上面的@Tim Biegeleisen所述,IDENTITY列最适合此类任务,但请记住,在DELETE和INSERTS失败的情况下,它可能会在数字序列中留下漏洞。

例如:

DECLARE @ts int; --or whatever numeric datatype it is
SELECT @ts = MAX(TRACKSEQ) + 1 FROM tbl_CommTracking   

INSERT INTO tbl_CommTracking   (
   --...
   TRACKSEQ
   --..
)
VALUES (
   --...
   @ts
   --...
)
另一答案

您应该将TRACKSEQ设为自动增量列。首先删除当前的TRACKSEQ列,然后将其添加回:

ALTER TABLE tbl_CommTrackingDROP COLUMN TRACKSEQ;
ALTER TABLE tbl_CommTracking ADD TRACKSEQ INT IDENTITY;

请注意,通常您还会将TRACKSEQ作为表的主键。如果您不想,那没关系,但是您必须确保为CLNTID列生成自己的唯一值。

你不明白为什么需要这个;如果您只想要最新记录,请使用可用的日期/时间戳列,该列可在插入期间设置。

以上是关于使用insert语句SQL将数字递增1的主要内容,如果未能解决你的问题,请参考以下文章

使用每一行作为 Insert Into 循环遍历表的行 - SQL

sql 新增 加1的语句怎么写

如何在 INSERT 语句中使用存储过程的 OUTPUT?

SQLite的LIKE语句实现字符片段筛选的功能

SQLite的LIKE语句实现字符片段筛选的功能

SQLite的LIKE语句实现字符片段筛选的功能