Sql server 插入select changes表格,该表格的最大id为包含事务的其他表格

Sql server 插入select changes表格,该表格的最大id为包含事务的其他表格,sql-server,tsql,Sql Server,Tsql,我有一个变更表,我需要分配下一个可用id,该id位于事务表中。批处理完成后,它将过帐到事务表。如何在select insert语句中获得另一个表的最大值+1?我必须在同一个查询中将它连接到code_id INSERT INTO CHANGES (P.CODE, P.ID, P.CODE_ID, P.FIRST_NAME, P.MIDDLE_NAME, P.LAST_NAME) SELECT 'P', MAX(transactionstable.ID) +1, 'P0000' + MAX(t

我有一个变更表,我需要分配下一个可用id,该id位于事务表中。批处理完成后,它将过帐到事务表。如何在select insert语句中获得另一个表的最大值+1?我必须在同一个查询中将它连接到code_id

INSERT INTO CHANGES 
(P.CODE, P.ID, P.CODE_ID, P.FIRST_NAME, P.MIDDLE_NAME, P.LAST_NAME) 
SELECT 'P', MAX(transactionstable.ID) +1, 
'P0000' + MAX(transactionstable.ID) +1, 'first','middle','last';

为什么不改为使用标识列?选择“P”,从transactiontable中选择maxid+1,“P0000”,从transactiontable中选择maxid+1,“first”…为什么需要在更改表中生成ID。为什么不让事务表中的标识列就足够了呢。如果在事务表中进行了任何其他插入,则在更改表中创建的ID总是与事务表中的ID重复的,这样的风险始终存在。为什么两列的数据基本相同?ID和CODE_ID是一样的。这是一个erp数据库,我正在与crm同步。所以我没有权利改变任何事情。
    INSERT INTO CHANGES (
                         P.CODE, 
                         P.ID, 
                         P.CODE_ID,
                         P.FIRST_NAME,
                         P.MIDDLE_NAME, 
                         P.LAST_NAME
                         ) 
    SELECT  P,      --remove single quote, otherwise it is static value
            MAX(transactionstable.ID) +1, 
           'P0000' + CAST((MAX(transactionstable.ID) +1) as VARCHAR(50)), --Conversion here for string concatenation 
            first,  --remove single quote, otherwise it is static value
            middle, --remove single quote, otherwise it is static value
            last    --remove single quote, otherwise it is static value

/*********************
    missing here
**********************/    
    FROM transactions