0

主な作業手順とそれに付随するログ手順があります。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
4

0 に答える 0