What about:
BEGIN TRANSACTION BEGIN TRY INSERT INTO dbo.YourFirstTable(.....) VALUES(.......) DECLARE @newID INT SELECT @newID = SCOPE_IDENTITY() INSERT INTO dbo.YourSecondTable(ID, .......) VALUES(@newID, ........) COMMIT TRANSACTION END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage ROLLBACK TRANSACTION END CATCH
It should work in any version of SQL Server 2005 or later .
Just by choosing SCOPE_IDENTITY() , you are definitely not breaking the transaction ... wrap this, for example. stored procedure or just call it from your call code.
source share