如何在没有身份的情况下自动增加id?

Gud*_*ain 0 sql-server sql-server-2000

我正在尝试从sql server中的另一个表进行批量插入.我的查询目前是这样的:

INSERT INTO Table1(Id, Value)
SELECT ??, Value
FROM Table2;
Run Code Online (Sandbox Code Playgroud)

现在,我的问题显然是我所取代的??.Id是没有标识属性的整数列.我希望每插入一行,Id取当前的max(Id) + 1.

我可以直接在insert命令中执行此操作吗?

Niz*_*zam 5

如果您使用的是较新版本的SQL Server(2008+),可以尝试ROW_NUMBER():

DECLARE @BASE INT 
SET @BASE = (SELECT IsNull(MAX(ID),0) FROM Table1)

INSERT INTO Table1(Id, Value)
SELECT 
    @BASE + ROW_NUMBER() OVER (ORDER BY Value) ID, 
    Value
FROM Table2;
Run Code Online (Sandbox Code Playgroud)

SQL小提琴

由于您使用的是SQL Server 2000,因此可以尝试下面的方法:

DECLARE @BASE INT 
SET @BASE = (SELECT IsNull(MAX(ID),0) FROM Table1)

INSERT INTO Table1(Id, Value)
SELECT 
   @BASE +  (SELECT COUNT(*) FROM Table2 AS i2 WHERE i2.Value <= a.Value),
   a.Value
FROM Table2 a
Run Code Online (Sandbox Code Playgroud)

但它只有在表2中的值是唯一的情况下才有效

SQL小提琴

如果Table2有主键(字段PK),那么您可以使用:

INSERT INTO Table1(Id, Value)
SELECT 
   @BASE +  (SELECT COUNT(*) FROM Table2 AS i2 WHERE i2.PK <= a.PK),
   a.Value
FROM Table2 a
Run Code Online (Sandbox Code Playgroud)