使用插入语句SQL将数字递增1

时间:2018-08-30 09:02:35

标签: sql insert increment

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

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')

谢谢

2 个答案:

答案 0 :(得分:1)

您可能应该将TRACKSEQ设为自动递增列。首先删除当前的TRACKSEQ列,然后将其重新添加:

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

请注意,通常您还可以将TRACKSEQ用作表的主键。如果您不想这样做,可以,但是必须确保可以为CLNTID列生成自己的唯一值。

尚不清楚为什么需要这个;如果您只想获取最新记录,请使用在插入过程中已设置的日期/时间戳列。

答案 1 :(得分:1)

假设TRACKSEQ是数字格式,则您可以读取实际的最大值并将其存储在变量中,以便在插入语句中使用。

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

例如:

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

INSERT INTO tbl_CommTracking   (
   --...
   TRACKSEQ
   --..
)
VALUES (
   --...
   @ts
   --...
)