我正在尝试将记录手动添加到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')
谢谢
答案 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
--...
)