我正在开发游戏数据库。我有一个存储过程,由游戏客户端在传送、登录、注销、死亡等过程中执行。游戏客户端是硬编码的,我无法编辑。
我正在我的程序中做一些事情,例如如果角色登录到游戏,然后将项目添加到角色的库存中。
对于每种不同类型的流程,我都有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)