我有一个主要的工作程序和一个附带的记录程序。我正在寻找关于我对 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