"Batch auto-increment" 用于多行插入的 ID
"Batch auto-increment" IDs for multiple row insertion
我在 SQL Server 2017 中工作,我有一个 table 的形式:
tbl_current
COL1 COL2
-----------
A 1
B 3
C 56
我想定期插入 table tbl_release
.
此 table 将有一个额外的 ID 列,我希望它随每个 "batch insertion" 自动递增。例如,假设我将 tbl_current
摄取到 tbl_release
中,它看起来像这样:
tbl_release
ID COL1 COL2
----------------
1 A 1
1 B 3
1 C 56
现在,假设我使用相同的数据执行另一次摄取,它看起来像:
tbl_release
ID COL1 COL2
----------------
1 A 1
1 B 3
1 C 56
2 A 1
2 B 3
2 C 56
实现此目标的最佳方法是什么?是否有一些 SQL 服务器功能可以实现此目的,或者我是否需要 运行 一些子查询?
您可以使用 MAX()
函数尝试此操作,如下所示。
Declare @maxId int
set @maxId = (Select isnull(id, 0) from tbl_Current)
set @maxId = @maxId + 1
--Now to insert
insert into tbl_release values (@maxId, <Column1Value>, <Column2Value>)
对于多重插入你可以试试这个
INSERT INTO tbl_release
SELECT @maxId, col1, col2 FROM tbl_Current
如果您的 table 的 Id 列是同一列,那么您还可以使用 Scope_Identity 获取 Id 列的最大值。
我个人会为此使用一个序列。假设插入你的临时 table 已经完成,它看起来像这样:
declare @ID int = next value for sequence dbo.mySequence;
insert into tbl_release
(ID, col1, col2)
select @ID, col1, col2
from tbl_current;
你的id
真的是一个对象。我强烈建议你给它一个完整的 table:
create table batches (
batch_id int identity(1, 1) primary key,
batch_start_date datetime,
. . .
);
那么,您现有的 table 的结构应为:
create table releases (
release_id int identity(1, 1) primary key,
batch_id int not null references batches(batch_id),
col1 char(1),
col2 int
);
这样,您的数据库就具有参照完整性。
我在 SQL Server 2017 中工作,我有一个 table 的形式:
tbl_current
COL1 COL2
-----------
A 1
B 3
C 56
我想定期插入 table tbl_release
.
此 table 将有一个额外的 ID 列,我希望它随每个 "batch insertion" 自动递增。例如,假设我将 tbl_current
摄取到 tbl_release
中,它看起来像这样:
tbl_release
ID COL1 COL2
----------------
1 A 1
1 B 3
1 C 56
现在,假设我使用相同的数据执行另一次摄取,它看起来像:
tbl_release
ID COL1 COL2
----------------
1 A 1
1 B 3
1 C 56
2 A 1
2 B 3
2 C 56
实现此目标的最佳方法是什么?是否有一些 SQL 服务器功能可以实现此目的,或者我是否需要 运行 一些子查询?
您可以使用 MAX()
函数尝试此操作,如下所示。
Declare @maxId int
set @maxId = (Select isnull(id, 0) from tbl_Current)
set @maxId = @maxId + 1
--Now to insert
insert into tbl_release values (@maxId, <Column1Value>, <Column2Value>)
对于多重插入你可以试试这个
INSERT INTO tbl_release
SELECT @maxId, col1, col2 FROM tbl_Current
如果您的 table 的 Id 列是同一列,那么您还可以使用 Scope_Identity 获取 Id 列的最大值。
我个人会为此使用一个序列。假设插入你的临时 table 已经完成,它看起来像这样:
declare @ID int = next value for sequence dbo.mySequence;
insert into tbl_release
(ID, col1, col2)
select @ID, col1, col2
from tbl_current;
你的id
真的是一个对象。我强烈建议你给它一个完整的 table:
create table batches (
batch_id int identity(1, 1) primary key,
batch_start_date datetime,
. . .
);
那么,您现有的 table 的结构应为:
create table releases (
release_id int identity(1, 1) primary key,
batch_id int not null references batches(batch_id),
col1 char(1),
col2 int
);
这样,您的数据库就具有参照完整性。