SQL Server相当于Oracle CURRVAL的双重功能

时间:2014-08-12 09:52:06

标签: oracle sql-server-2012 cursor

这些Oracle块的目的是什么?特别是关键字CURRVALROWNUM。我如何将这些转换为SQL Server 2012?请帮忙。

CURSOR cursor_1 IS
        SELECT ID.CURRVAL identity FROM dual;

CURSOR cursor_2 IS
        SELECT COUNT(*) Count_total  FROM tbl1
         WHERE ROWNUM = 1;

1 个答案:

答案 0 :(得分:0)

CURRVAL获取Oracle序列的当前值(不增加它)。 (NEXTVAL会增加序列并检索新的当前值。)请参阅此处的文档:

http://docs.oracle.com/database/121/SQLRF/pseudocolumns002.htm#SQLRF00253

您的cursor_1只是检索名为“ID”的序列的当前值。

SQL Server我相信没有序列,但我不确定微软是否可能在新版本中添加类似的东西? SQL Server使用标识列而不是序列。无法以有意义的方式将游标转换为SQL Server。你必须知道光标的目的是什么?可能必须替换为选择新插入行的标识列的值(如果在插入具有使用ID.NEXTVAL的触发器的表之后发生这种情况)。

-

WHERE ROWNUM = 1只从tbl1中选择一个“随机”行并对其进行计数。因此count_total将为0或1,具体取决于tbl1中是否存在行。也许可以用SELECT TOP 1代替,但我不确定TOP查询中的COUNT在 TOP处理后是还是 TOP之前。< / p>