主な作業手順とそれに付随するログ手順があります。SQL Server 2008 での私の仮定の検証を探しています。望ましい結果は、SP1 ができることは何でも実行し、途中で SP2 を呼び出して進行状況を記録することです。SP1 でトランザクションのロールバックを引き起こすエラーが発生したかどうかに関係なく、SP2 の作業はコミットされます。
私が持っているものは安全に見えますか? SP2 ではトランザクションに別の名前を付ける必要がありますか?
------------------------------------------------------- SP1 pseudocode
BEGIN TRY
BEGIN TRANSACTION
-- Do stuff
-- log progress
exec SP2( getutcdate(), 'source_is_sp1','message for progress');
-- Do more stuff
-- log progress
exec SP2( getutcdate(), 'source_is_sp1','message for progress');
-- etc
COMMIT TRANSACTION
RETURN 0
END TRY
BEGIN CATCH
-- error handling not important
ROLLBACK TRANSACTION
return @StepNumber -- not important
END CATCH
------------------------------------------------------- SP2
CREATE PROCEDURE [dbo].[SP2]
@Source as nvarchar(100),
@Timestamp as datetime,
@Message as nvarchar(4000)
AS
BEGIN
SET NOCOUNT ON;
IF @Timestamp is null
BEGIN
set @Timestamp = GETUTCDATE();
END
IF @Source IS NOT NULL AND @Message IS NOT NULL
BEGIN
BEGIN TRANSACTION;
INSERT INTO LOG(LOGTIMESTAMP, SOURCEVCH, MESSAGEVCH)
VALUES (@Timestamp, @Source, @Message);
COMMIT TRANSACTION;
END
END