将行插入到 table 中,带有不自动递增的递增列

Insert rows into a table with a increment column without auto increment

我有一个 table Person 结构如下:

[ID] int PRIMARY KEY
[Name] nvarchar(100)
[Address] nvarchar(1000)

我无法在 ID 列上使用自动递增。

我必须将 10 行(存在于 @Persons table 变量中)插入 Person table 并且我知道当前的最大值 ID是 125.

如何在不使用循环或游标的情况下将这 10 行插入 Person table?

获取最大值并将其添加到 select 期间的 ROW_NUMBER() 列。

 (
   ID      int primary key
 , name    nvarchar(100)
 , Address nvarchar(1000)
 );

INSERT INTO Person
VALUES
      (122, 'John Doe', 'Some Address 123')
    , (123, 'Homer Simpson', 'Some Address 456')
    , (124, 'Jane Doe', 'Some Address 789')
    , (125, 'Bo Katan', 'Some Address 101112');
    
DECLARE @Persons TABLE
 (
   ID      int primary key
 , name    nvarchar(100)
 , Address nvarchar(1000)
 );
 
INSERT INTO @Persons
VALUES
      (2, 'Quinn Amaro','New Address a')
    , (3, 'Elenor Barreras','New Address B')
    , (4, 'Mckinley Dart','New Address c')
    , (5, 'Ronnie Tank','New Address D')
    , (6, 'Woodrow Creek','New Address e')
    , (7, 'Brittany Patlan','New Address F')
    , (8, 'Len Venzon','New Address g')
    , (9, 'Ila Goodlow','New Address H')
    , (10, 'Velma Tallarico','New Address i')
    , (11, 'Blossom Hanney','New Address J');

INSERT INTO Person (ID, name, Address)    
SELECT
      ID = ROW_NUMBER() OVER(ORDER BY ID) + (SELECT MAX(ID) FROM Person)
    , name
    , Address
FROM @Persons;

SELECT *
FROM Person;

Example db fiddle