我正在使用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?
答案 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]