select max(Key) from MyTable with(nolock)
我有这个T-SQL语句但是需要为SQL Server和Oracle使用一个语句,当然Oracle不能识别“with(nolock)”。有没有办法让这个语句在两个数据库上运行。通过Oracle忽略“with(nolock)”或者只使用Sqlserver使用语句的这一部分,或者用一种方式或编码来理解这两者。
我使用No lock的原因是因为多个用户正在访问同一个表,我需要在事务处理期间找到最大值。
Oracle做的事情有点不同,所以我不必担心表锁。
答案 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
提示实现类似的语义,但之后您又需要两个不同的查询。