使用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的主要内容,如果未能解决你的问题,请参考以下文章