以下是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中允许这样做
答案 0 :(得分:7)
您不能两次提交相同的交易。您可以拥有嵌套事务,但不能进行“部分”提交,这与事务的概念(它是全有或全无)相矛盾。如果两个提交都被执行,第二个将抛出错误
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION