我在查找SQL Anywhere 16行为时遇到的问题与Sybase 9相比,它们都具有相同的数据库集作为脏读或
set transaction isolation level 0
即使从Delphi应用程序(使用TAsaSession)或通过SQL_anywhere_XX,我也会遇到相同的行为:
在Sybase 9上,我可以通过两个连接运行
UPDATE associate SET nm_associate = nm_associate + ' Test' WHERE id_associate = 620
最后没有COMMIT
;
在Sybase 16上,第一个连接锁定了关联的表,并保留第二个连接,直到COMMIT
运行并释放它。
我不确定隔离级别是否与它有任何关系,或者如果它是我需要设置的任何其他东西,所以我可以从9迁移到16而没有这个问题。 谁能帮助我?
答案 0 :(得分:0)
隔离级别0仅对读取操作有效:它允许您读取属于其他用户的尚未提交的事务的数据。 运行更新时,无论您在会话中将隔离级别设置为什么,都至少将级别1用于更新语句。
答案 1 :(得分:0)
在每个连接上设置chained='On'
后问题已解决。
AsaConnection.Connected := True;
vQry.Session := AsaConnection;
vQry.SQL.Text := 'SET OPTION chained=''On''';
vQry.ExecSQL;