使用插入语句 SQL 将数字加一

Increment number by one using an insert statement SQL

我正在尝试手动将记录添加到 SQL table 然而,在这个 table 中,我们有一个名为 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')

谢谢

您或许应该使 TRACKSEQ 成为自动递增列。首先删除当前的 TRACKSEQ 列,然后将其添加回来:

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

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

还不完全清楚你为什么需要这个;如果您只想要最新记录,请使用可用的 date/timestamp 列,该列将在插入期间设置。

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

请注意,在高并发的情况下,您可能希望同步此执行以避免重复的@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
   --...
)