どうですか:
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
SQL Server 2005 以降のどのバージョンでも動作するはずです。
SCOPE_IDENTITY()
値をフェッチするだけでは、トランザクションを「壊す」ことはありません...これをストアドプロシージャなどにラップするか、呼び出しコードから呼び出すだけです。