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