1

我有一个 ABAP 类,其中包含用于读取/写入远程 Microsoft SQL Server 2005 实例的各种方法。

一切都按预期工作。现在,出于安全原因,我被建议在 SELECT 查询中添加 SQL Server 表提示 (READPAST)(这应该是防止死锁的一种措施——我远非 SQL 专家)。

可悲的是我不能让它工作。这是我的 Native SQL 块,它可以正常工作:

EXEC SQL.
  OPEN ritc FOR
    SELECT FIELD1,
           FIELD2,
           FIELD3,
           FROM MY_TABLE
           WHERE FIELD1 <= :lv_variable1
             AND FIELD3 =  :c_constant
ENDEXEC.

如果我尝试WITH(READPAST)在 之后立即添加FROM MY_TABLE,我会收到此错误:您只能在 READ COMMITTED 或 REPEATABLE READ 隔离级别中指定 READPAST 锁

OPEN ritc很公平:我尝试在该行之前添加此命令:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

这引发了一个不同的错误:在FETCH此块之后的第一个命令中,我收到一条错误消息,指出游标ritc存在并且它已经打开。

在这一点上,我什至不确定我是否可以将表提示添加到本机 SQL 块?

有什么建议么?提前致谢。

4

2 回答 2

0

也许您需要 BEGIN TRANSACTION 语句?

(您还需要另一个 ABAP 块中的 END TRANSACTION 语句。)

于 2010-11-04T16:22:32.220 回答
0

我认为 SET 需要在 OPEN 之后完成。

EXEC SQL.
  OPEN ritc FOR
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED
    SELECT FIELD1,
           FIELD2,
           FIELD3,
           FROM MY_TABLE WITH (READPAST)
           WHERE FIELD1 <= :lv_variable1
             AND FIELD3 =  :c_constant
ENDEXEC.
于 2010-11-04T18:21:08.373 回答