Tsql oracle rownum传输到t-sql row_number()时出错

Tsql oracle rownum传输到t-sql row_number()时出错,tsql,plsql,rownum,Tsql,Plsql,Rownum,简化的原始pl_sql是 select t.*, staff_no||'-'||rownum as pk from (select * from hrmmgr.posting where type not in ('X','C') order by staff_no, postingdate) t; 我尝试将其重写为在SQLServer中作为 select t.*, staff_no + '-' + t.rownum as pk from (select row_number() over

简化的原始pl_sql是

select t.*, staff_no||'-'||rownum as pk 
from (select * from hrmmgr.posting where type not in ('X','C') order by staff_no, postingdate) t;
我尝试将其重写为在SQLServer中作为

select t.*, staff_no + '-' + t.rownum as pk
from (select row_number() over (order by staff_no, postingdate) as rownum, * 
from posting where type not in ('X','C') order by staff_no, postingdate) t
但是错误

ORDER BY子句在视图、内联函数和派生函数中无效 表、子查询和常用表表达式(除非为TOP)、偏移量 也为XML指定了or

他回来了

如果我尝试添加偏移量,如错误消息所示,如下所示:

select t.*, staff_no + '-' + t.rownum as pk
from (select row_number() over (order by staff_no, postingdate OFFSET 0 ROWS) as rownum, * 
from posting where type not in ('X','C') order by staff_no, postingdate) t 
然后显示以下错误

“行”附近的语法不正确


那么,如何重写我的plsql以在sql server中运行呢?

子查询中的
ORDER BY
子句似乎是个问题,sql server告诉您,如果不使用类似
TOP
的内容,子查询中就不能出现
ORDER BY
。但是,这里甚至不需要这样做,因为您对
ROW\u NUMBER
的调用已经指定了一个
ORDER BY
子句,用于分配行号。请尝试以下版本:

SELECT t.*, staff_no + '-' + t.rownum AS pk
FROM
(
    SELECT ROW_NUMBER() OVER (ORDER BY staff_no, postingdate) AS rownum, * 
    FROM posting
    WHERE type NOT IN ('X', 'C')
) t;

哦,我误解了order by错误消息是指第_number()行中的order by。