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
亲切的问候
尝试在"批处理"选择中使用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在下面关于原子性的评论.在上面的示例中,您至少需要一个可重复读取的事务来确保一致性.