gpt4 book ai didi

sql-server - SQL Server - 如何在多行 INSERT 事务中手动递增 PK

转载 作者:行者123 更新时间:2023-12-05 00:25:20 26 4
gpt4 key购买 nike

我在 SQL Server 中工作。我有一个包含 PK int 列的表。此列未启用自动递增,并且不允许我更改架构。我需要手动将很多行(可能数千行)插入到该表中。插入的数据都不会来自任何现有表。但是,我需要确保 PK 列对于每个新行都增加 +1。我当前的脚本如下所示:

BEGIN TRAN
INSERT INTO DB1.dbo.table1
(PK_col, col1)
VALUES
(10, 'a')
,(11, 'something')
,(12, 'more text')
;

我已经通过预查询 (SELECT MAX(PK_col) + 1) 知道 PK_col 当前为 9。

我的问题是确保 PK 列对于每个新行都增加 +1。因为可能有数千行要插入,所以我想减少跳过值或抛出 PK 约束违规的可能性。我知道我可以在数据库之外(通过 Excel)实现这一点,只要我在运行 SQL 脚本之前验证 PK 值即可。但是,我想创建一个解决方案来处理 TRAN 语句本身内的自动增量。这可能吗(没有遇到竞争条件)?如果是,怎么办?

最佳答案

下面应该做你想做的:

INSERT INTO DB1.dbo.table1(PK_col, col1)
SELECT COALESCE(l.max_pk_col, 0) + row_number() over (order by (select null)) as PK_col,
col1
FROM (VALUES ('a'), ('something'), ('more text')) v(col1) CROSS JOIN
(SELECT MAX(pk_col) as max_pk_col FROM DB1.dbo.table1) l;

你需要小心这种安排。在 INSERT 期间锁定整个表可能是个好主意——如果还有其他任何事情可以更新表的话。

关于sql-server - SQL Server - 如何在多行 INSERT 事务中手动递增 PK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42013000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com