无论while循环的范围如何,都可以对一个事务进行多次提交

时间:2012-12-14 09:49:45

标签: sql sql-server

以下是SQL Server存储过程。在交易开始时有两个提交,如下所示。这是有效的(启动是在while循环中,第一次提交是在同一个循环中,但第二次提交是在第二次循环时)?如果没有可能的解决方案呢?

请帮忙。

IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'DELETE_COBOC_DATA')
DROP PROCEDURE DELETE_COBOC_DATA
GO

CREATE PROCEDURE DELETE_COBOC_DATA @ORGDN VARCHAR(100), @CHUNK VARCHAR(10) 
AS
BEGIN
    -- some code that executes before while           
    WHILE (@NUM_ROWS_TMPTRADMIN > 0) 
    BEGIN               

        BEGIN TRANSACTION
            -- executes some code
        COMMIT TRANSACTION                              
    END
    -- some more code
    WHILE @NUM_ROWS_TMPDIR > 0
    BEGIN
        -- code code code
        COMMIT TRANSACTION
        -- code code code
    END
    -- some more code here as well
END

据我所知,MySQL中允许这样做

1 个答案:

答案 0 :(得分:7)

您不能两次提交相同的交易。您可以拥有嵌套事务,但不能进行“部分”提交,这与事务的概念(它是全有或全无)相矛盾。如果两个提交都被执行,第二个将抛出错误

The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION