2017-06-15 177 views
0

我正在使用SQL事务和事务内部,我需要一次插入多条记录。提交之前增加SQL事务中的计数器变量

但问题是,我的身份证不是身份证。所以,我需要获得最大ID并插入它。 但是,当我得到最大和增量+1。它总是一样的。

以下是我的代码。

BEGIN 
DECLARE @maxId INT; 
SET @maxId = (SELECT MAX(id) FROM [dbo].[tempUser]); 
    BEGIN TRAN 
     BEGIN TRY 


     INSERT INTO [dbo].[tempUser] (id, principal, first_name, last_name, email, isActive) 
     SELECT @maxId+1, A.User_Id, A.FirstName,A.LastName, '[email protected]', 1 FROM ADUser_Table A 
     LEFT JOIN [dbo].[tempUser] B on A.User_Id =B.principal where B.principal Is NULL 


    COMMIT TRAN 
     END TRY 
     BEGIN CATCH 
      ROLLBACK TRAN 
     END CATCH 
END 

如何在sql事务中的每条记录中插入max id +1?

回答

0

相反@ maxid + 1,你可以用ROW_NUMBER(),如下添加@maxId。

SELECT @maxId+ (row_number()over(order by A.User_Id)) , A.User_Id,.. 
from [yourtable] 
0

使用Row_Number而将在明年 -

BEGIN 
DECLARE @maxId INT; 
SET @maxId = (SELECT MAX(id) + 1 FROM [dbo].[tempUser]); 
    BEGIN TRAN 
     BEGIN TRY 


     INSERT INTO [dbo].[tempUser] (id, principal, first_name, last_name, email, isActive) 
     SELECT row_number() over(order by A.User_Id) + @i , A.User_Id, A.FirstName,A.LastName, '[email protected]', 1 FROM ADUser_Table A 
     LEFT JOIN [dbo].[tempUser] B on A.User_Id =B.principal where B.principal Is NULL 


    COMMIT TRAN 
     END TRY 
     BEGIN CATCH 
      ROLLBACK TRAN 
     END CATCH 
END