2017-06-15 62 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