--以下语句为将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

根据您的描述,您想将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值,并将其插入到新记录中。
谢谢,但试过还是没变

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

键值约束

谢谢各位,正确答案:
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