小编Hal*_*mus的帖子

SQL Server SET XACT_ABORT ON 与 TRY...CATCH 存储过程内的块

我正在开发游戏数据库。我有一个存储过程,由游戏客户端在传送、登录、注销、死亡等过程中执行。游戏客户端是硬编码的,我无法编辑。

我正在我的程序中做一些事情,例如如果角色登录到游戏,然后将项目添加到角色的库存中。

对于每种不同类型的流程,我都有IF块,并且TRY...CATCH每个“IF”块中都有块,以便能够处理程序中的任何错误。

TRY...CATCH所以,我的问题是,以这种方式使用块确实有意义吗?或者我应该使用SET XACT_ABORT ON声明而不是TRY...CATCH?哪一个更好?顺便说一句,如果IF块中出现任何错误,则该块必须是完整的ROLLBACK

另外,我的程序是由游戏客户端高度执行的。有近 800 个在线角色一直在游戏中移动并执行我的程序。它应该尽可能快地执行。

ALTER PROCEDURE [dbo].[_AddLogChar]
    @CharID  INT,
    @EventID TINYINT,
    @Data1   INT,
    @Data2   INT,
    @strPos  VARCHAR(64),
    @Desc    VARCHAR(128)
AS
    ---- !!! KILL PROCEDURE !!! ----
    IF (@EventID NOT IN (4,6,20))
    BEGIN
        RETURN 0;
    END

    ---- BATTLE ARENA | ACADEMY ----
    IF (@EventID = 20)
    BEGIN
        BEGIN TRY
            BEGIN TRANSACTION TRAN_Battle_Arena

            -- Declaration of variables for battle area conditions
            DECLARE @CharInBattle VARCHAR(64) …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server stored-procedures

2
推荐指数
1
解决办法
3129
查看次数

标签 统计

sql-server ×1

stored-procedures ×1

t-sql ×1