如何使用插入语句使列上的 SQL 的 ID 增加 1

How to have SQL increase ID by 1 on a column using an insert statement

我正在尝试将多行插入 SQL。 table 包含一个外部 ID 列,在使用 APP 时将此 ID 加一。外部ID不是Primary key,而是table中的另一个ID。目前最后一个外部 ID 是 544。我想再插入 1600 行,并且每插入一行,外部 ID 就会增加 1。我尝试了以下方法,但所有外部 ID 最终都是 100。

INSERT INTO tableA (externalid,tableuiduid) 
VALUES ((select ISNULL(MAX(EXTERNALID) +1, 0)from tableA),newid());

我也试过这个,但它最终插入了一个重复的外部 ID,因为数字之间存在差距。

INSERT INTO tableA (ExternalID,tableAuid)
VALUES ((select count (externalid) + from tableA),newid());

请让我知道我需要使用什么来使这个增加 1 而不是插入重复的 ID。

您现在的做法,取决于您的 RDBMS,您可以使用 INSERT INTO ... SELECT 语句:

INSERT INTO tableA (externalid, tableuiduid) 
select ISNULL(MAX(EXTERNALID) + 1, 0), newid()
from tableA;

但是你需要执行 1600 次。

如果您有一个辅助数字 table 或使用递归 CTE,您可以使用它一次生成 1600 行,但如果不了解您的 RDBMS,精确实施是非常困难的。

您可以将字段定义为自动递增的字段或序列,但我的印象是这不是一个好主意,因为您并不总是要确定 externalid 值是什么.

您应该在 ISNULL 之外使用 +1。并使用 INSERT INTO .. SELECT.

试试这个方法:

DECLARE @Cnt as int
SET @Cnt = 0

WHILE (@Cnt < 1600)
BEGIN
    INSERT INTO tableA (externalid,tableuiduid) 
    select ISNULL(MAX(EXTERNALID),0) + 1,newid()
    from tableA
    SET @Cnt = @Cnt + 1
END

首先创建一个序列。

create sequence seq1
   start with 544
   increment by 1
   maxvalue 99999;

然后插入。

  INSERT INTO tableA (externalid) 
  VALUES (seq1.nextval())