如何使用插入语句使列上的 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())
我正在尝试将多行插入 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())