MS-SQL将TRANSACTION与游标和存储过程一起使用

时间:2018-01-29 14:20:33

标签: sql-server stored-procedures transactions

有人能说出这个存储过程有什么问题吗?

我想在存储过程中使用transacation但是如果我运行此过程,则会收到以下错误消息:" COMMIT TRANSACTION请求没有相应的BEGIN TRANSACTION"

我没有得到它......我用BEGIN和COMMIT命令尝试了很多选项...

P.S。在while循环中的内容并不重要,错误仍然存​​在。

有什么想法吗?

如果我在SSMS中使用查询窗口,则会引发错误。

USE db
GO
DECLARE @return_value int,
@str_return nvarchar(100)

EXEC    @return_value = [dbo].[proc_xxxx]
@guid = 'xxxxxxxxxxxxxxxxx',

@str_return = @str_return OUTPUT

SELECT  @str_return as N'@str_return'

SELECT  'Return Value' = @return_value

GO

也许这就是原因?

-- Declare Cursor
DECLARE xx_cursor CURSOR FOR
SELECT  GUID
FROM    TABLE;

    BEGIN TRY 

    BEGIN TRAN

        OPEN xx_cursor;

        -- Run through
        FETCH NEXT FROM xx_cursor INTO @guid_xx;

        WHILE @@FETCH_STATUS = 0
            BEGIN

            --DO SOMETHING

            FETCH NEXT FROM xx_cursor INTO @guid_xx;
            END;

        COMMIT TRAN

    END TRY

    BEGIN CATCH

            ROLLBACK TRAN

        SET @str_return = 'Error'

    END CATCH

    CLOSE xx_cursor;
    DEALLOCATE xx_cursor;

0 个答案:

没有答案