我正在使用带有struts框架的ms sql。 在调用程序时,我在程序中输入了autocommit false。 当程序运行时,我必须提交一个单独的事务,它必须在外部影响表 但是在conn.commit()语句在程序中执行之前,它永远不会保存。 是否有任何其他方式在过程本身中提交事务,以影响过程中单个事务结束时的表? PL。告诉我你是否知道。
T.Saravanan
答案 0 :(得分:1)
您应该在同一级别启动并提交/回滚事务,否则您将引入许多不可预测的路径 - 坦率地说是一些糟糕的设计。所以:如果你需要在服务器上提交,请在TSQL中使用BEGIN TRAN
/ COMMIT TRAN
来在本地处理事务。
但请注意,TSQL异常/错误处理不如在java / C#等调用者处理错误一样丰富。如果问题是您想要将此工作与其他不相关的事务取消关联,那么这取决于您的调用代码的工作方式:
TransactionScope
;不确定java等 - 但这是LTM或DTC事务),那么您可以显式创建一个绑定到任一个的新范围 new (隔离)事务,或者nil-transaction(即内部范围未入伍)至于影响表... SQL Server通常会做出乐观的改变,即是立即应用更改(因此提交便宜,回滚更昂贵) - 但是,< strong> 隔离级别 通常会阻止其他SPID查看数据。具有低隔离级别(或使用NOLOCK
提示)的竞争SPID将看到未提交的数据,但如果数据最终被回滚,则这可能是幻像/不可重复读取。