2017-06-15 9 views
0

SQLトランザクションと内部トランザクションを使用していますが、複数のレコードを一度に挿入する必要があります。コミット前のSQLトランザクションのカウンタ変数のインクリメント

しかし、問題は私のIDが身元ではないということです。だから、私は最大のIDを取得し、それを挿入する必要があります。 しかし、私は最大と増分+1を得る。それは常に同じです。

以下はmyコードです。

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

あなたは以下のように)(ROW_NUMBERと@maxIdを追加することができます。

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

使用Row_Numberとして次を挿入しながら: - 代わりに、@のMAXID + 1の

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 
関連する問題