gpt4 book ai didi

sql - 数据库事务仅部分提交

转载 作者:太空狗 更新时间:2023-10-30 01:57:34 24 4
gpt4 key购买 nike

我有一个在 Sybase ASE 数据库服务器上运行的 T-SQL 存储过程,它有时无法提交其所有操作,即使它无一异常(exception)地完成。这是它的作用的粗略示例。

BEGIN TRANSACTION

UPDATE TABLE1
SET FIELD1 = @NEW_VALUE1
WHERE KEY1 = @KEY_VALUE1

IF @@error <> 0 OR @@rowcount <> 1 BEGIN
ROLLBACK
RETURN 1
END

UPDATE TABLE2
SET FIELD2 = @NEW_VALUE2
WHERE KEY2 = @KEY_VALUE2

IF @@error <> 0 OR @@rowcount <> 1 BEGIN
ROLLBACK
RETURN 2
END

INSERT TABLE2 (FIELD2, FIELD3)
VALUES (@NEW_VALUE3a, @NEW_VALUE3b)

IF @@error <> 0 OR @@rowcount <> 1 BEGIN
ROLLBACK
RETURN 3
END

COMMIT TRANSACTION
RETURN 0

该过程每天至少被调用数百次。在这些情况的一小部分(可能 < 3%)中,只有 INSERT 语句会提交。 proc 完成并返回 0,但两个 UPDATE 不执行。最初我们认为可能是 UPDATE 上的 WHERE 子句没有匹配到任何东西,所以我们添加了 IF @@rowcount 逻辑.但即使在那里进行了这些检查,INSERT 仍在进行并且该过程仍在完成并返回 0。

我正在寻找有关可能导致此类问题的原因的想法。 SQL 事务的工作方式或 Sybase 的具体工作方式是否会导致 COMMIT 不提交所有内容?我的 IF block 是否有什么东西可以让 UPDATE 不匹配任何东西,但程序继续?还有其他想法吗?

最佳答案

是否有可能他们正在更新,但某些东西正在将值改回来?尝试在这些表上添加更新触发器,并在该触发器内插入日志表。对于看起来没有更新的行,查看日志,是否有行?

关于sql - 数据库事务仅部分提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1399996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com