这些Oracle块的目的是什么?特别是关键字CURRVAL
和ROWNUM
。我如何将这些转换为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;
答案 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>