在多列上插入行自动增量

Jan*_*ren 2 sql t-sql auto-increment sql-server-2008

我有下表

tbl_Users

Id , UserFile, Name  
1,1200,Jan  
2,1201,Piet  
3,1202,Joris  
Run Code Online (Sandbox Code Playgroud)

第一列已经是一个标识列.现在我想将联系人的批量插入新用户.

INSERT INTO tbl_Users (UserFile,Name)  
    SELECT [AutoIncrement], Name 
    FROM tbl_ContactPerson 
    WHERE (ContactType = 'U') 
Run Code Online (Sandbox Code Playgroud)

我的问题在于[AutoIncrement],如何在UserFile列中添加+1,以便我在该列上也有自动增量?

我正在使用SQL Server 2008R2

亲切的问候

Nei*_*oss 7

尝试在"批处理"选择中使用ROW_NUMBER()函数:

declare @StartValue int
SELECT @StartValue = MAX(UserFile) FROM tbl_Users 

INSERT INTO tbl_Users (UserFile,Name)   
    SELECT 
        (@StartValue + ROW_NUMBER() over (order by (select 1))) as IncrementNumber, 
        Name  
    FROM 
        tbl_ContactPerson  
    WHERE 
        (ContactType = 'U') 
Run Code Online (Sandbox Code Playgroud)

(order by(select 1))是一个小的hack,按照select返回的顺序对行进行编号.

您需要使用适当的基数为@StartValue播种.我已经使用了之前的UserFile值的最大值.

编辑注释Andriy M在下面关于原子性的评论.在上面的示例中,您至少需要一个可重复读取的事务来确保一致性.