首页 新闻 会员 周边

SQL:同表追加插入ID递增问题

0
悬赏园豆:5 [已解决问题] 解决于 2023-08-18 16:56

--以下语句为将process表iPacketVersionIden = 11改为iPacketVersionIden = 12,再追加入process表,但问题出在ProcessID中,ProcessID值不能重复,故有
(select (select max(ProcessID) from process))+1 as ProcessID 这句,想不断将最大值ProcessID+1写入,目前ProcessID最大值是1162,但执行此句后,都是1163(如下图),并不会递增,求帮忙看看,谢谢!
INSERT into process (
ProcessID,
ProcessName,
12
)
SELECT
(select (select max(ProcessID) from process))+1 as ProcessID,
ProcessName,
iPacketVersionIden
FROM process WHERE iPacketVersionIden = 11

tea2007的主页 tea2007 | 初学一级 | 园豆:1
提问于:2023-08-16 15:28
< >
分享
最佳答案
0

根据您的描述,您想将process表中iPacketVersionIden为11的记录更新为12,并将更新后的记录追加到process表中。您希望在插入新记录时,使用当前最大的ProcessID值加1作为新的ProcessID值。

问题出在您的查询中,您在子查询中使用了(select max(ProcessID) from process)来获取当前最大的ProcessID值,并在外部查询中使用(select (select max(ProcessID) from process))+1来计算新的ProcessID值。然而,由于子查询在每次执行时都会返回相同的结果,所以您得到的新的ProcessID值始终是相同的。

要解决这个问题,您可以将获取最大ProcessID值的子查询放在外部查询的FROM子句中,使用CROSS JOIN来将其与原始表进行连接,然后根据连接后的结果计算新的ProcessID值。以下是修改后的查询:

INSERT INTO process (
    ProcessID,
    ProcessName,
    iPacketVersionIden
)
SELECT
    max_pid.ProcessID + 1 AS ProcessID,
    p.ProcessName,
    12 AS iPacketVersionIden
FROM
    process p
CROSS JOIN
    (SELECT max(ProcessID) AS ProcessID FROM process) max_pid
WHERE
    p.iPacketVersionIden = 11;

在这个查询中,我们将获取最大ProcessID值的子查询放在了外部查询的FROM子句中,并使用CROSS JOIN将其与原始表进行连接。然后,我们根据连接后的结果计算新的ProcessID值,并将其插入到新记录中。

收获园豆:5
lanedm | 老鸟四级 |园豆:2381 | 2023-08-17 08:46

谢谢,但试过还是没变

tea2007 | 园豆:1 (初学一级) | 2023-08-17 15:08

插了重复键值,应该是processid 插入了相同的1163

tea2007 | 园豆:1 (初学一级) | 2023-08-17 15:22

键值约束

tea2007 | 园豆:1 (初学一级) | 2023-08-17 15:25
其他回答(1)
0

谢谢各位,正确答案:
INSERT into process (ProcessID,
MachineTypeID,
ProcessName,
Remark,
LogInfo,
IsLinked,
ModifyDate,
iPacketVersionIden,
ProcedureID)
SELECT
(row_number() over (order by ProcessID)+(select (select max(ProcessID) from process))) as ProcessID,
2,
ProcessName,
Remark,
LogInfo,
IsLinked,
ModifyDate,
12,
ProcedureID
FROM process WHERE iPacketVersionIden = 11

tea2007 | 园豆:1 (初学一级) | 2023-08-18 16:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册