Oracle和SQL语句NO LOCK

时间:2012-01-03 11:04:18

标签: oracle tsql

select max(Key) from MyTable with(nolock)

我有这个T-SQL语句但是需要为SQL Server和Oracle使用一个语句,当然Oracle不能识别“with(nolock)”。有没有办法让这个语句在两个数据库上运行。通过Oracle忽略“with(nolock)”或者只使用Sqlserver使用语句的这一部分,或者用一种方式或编码来理解这两者。

我使用No lock的原因是因为多个用户正在访问同一个表,我需要在事务处理期间找到最大值。

Oracle做的事情有点不同,所以我不必担心表锁。

1 个答案:

答案 0 :(得分:5)

您的查询正在做不同的事情。应该是什么样的查询语义?是否应该返回max(Key),包括SQL Server版本指示的未提交事务的影响?如果是的话

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
select max(Key)
from MyTable;

是相同的语义。 语法在两个AFAIK上都可以正常工作。

如果您想要最后一个提交的max(Key),则需要更改SQL Server数据库以默认使用读提交的快照隔离,因此它的行为与Oracle类似。或者,您可以使用ROWLOCK,READPAST提示实现类似的语义,但之后您又需要两个不同的查询。