提交前SQL事务中计数器变量的增量

时间:2017-06-15 07:54:01

标签: sql-server transactions

我正在使用SQL Transaction和内部事务我需要一次插入多个记录。

但问题是我的身份证不是身份证明。所以,我需要获得最大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, 'ab@gmail.com', 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 transaction中为每条记录插入max id +1?

2 个答案:

答案 0 :(得分: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, 'ab@gmail.com', 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

答案 1 :(得分:0)

您可以使用row_number()添加@maxId而不是@ maxid + 1。

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