2014-09-11 89 views
0

我连接到带有3个链接服务器的SQL SERVER 2012。我使用预先制作的查询来获取数据,但是提出查询的人没有实现我将需要的分页,所以我试图推动这个功能。有一点需要注意的是,我不知道链接服务器的版本。这可能是第一次使用链接服务器,所以我不熟悉它们的工作方式,但由于在我的机器上,我有2012版本,我尝试使用OFFSETFETCH,但得到了无效令牌的错误。然后我被建议尝试在我的本地SQL SERVER 2008R2上运行的语法,但是我也不能这么做,在这里。首先是工作代码:在工作查询中实现分页

select * 
from openquery(linkedServer, 
' 
select 
    ORG.Id as ID, 
    ORG.FirstName AS "FirstName", 
    ORG.LastName as LastName 

from YMFK.LK99Z ORG 

left outer join YMFK.LK88Z Phone 
    ON ORG.Number = Phone.Number 
    AND Phone.Col = ''something'' AND Phone.Col = ''else'' 
inner join YMFK.L77Z ORL 
    ON ORG.Id = ORL.Id 
where 
ORG.FirsName like ''%Peter%''' 
) 

对不起,修改名称,但逻辑保持不变,所以我认为它不会是一个问题。

于是我尝试添加分页,像这样:

from (SELECT tbl.*, ROW_NUMBER() OVER(ORDER BY ID) AS 
     rownum FROM YMFK.LK99Z as tbl WHERE ORG.FirstName like ''%Peter%'') ORG 
     WHERE ORG.rownum BETWEEN 1 AND 10 

我穿上的from YMFK.LK99Z ORG的地方,也是消除where ORG.FirsName like ''%Peter%'''。这段代码是什么我就先形成工作分页查询modfying它尽量少,但第一(原)查询工作,而第二(修改)查询是给我的错误

Column qualifier or table ORG undefined.".

回答

1

在您的代码中:

from (SELECT tbl.*, ROW_NUMBER() OVER(ORDER BY ID) AS 
     rownum FROM YMFK.LK99Z as tbl WHERE ORG.FirstName like ''%Peter%'') ORG 
     WHERE ORG.rownum BETWEEN 1 AND 10 

别名ORG定义在内部范围之外。
尝试以下方法:

from (SELECT tbl.*, ROW_NUMBER() OVER(ORDER BY ID) AS 
     rownum FROM YMFK.LK99Z as tbl WHERE tbl.FirstName like ''%Peter%'') ORG 
     WHERE ORG.rownum BETWEEN 1 AND 10 
+0

我没有立刻得到错误像以前一样,但之后好像2-3secs我得到这个错误 - '功能不支持查询“' – Leron 2014-09-11 12:47:23

+0

当您运行非常怎样就怎样。直接在远程服务器上查询相同的查询? – Paolo 2014-09-11 12:51:05

+0

我正在远程服务器上运行它们。现在我正在使用'Ms SQL Management studio'并直接执行每个查询。 – Leron 2014-09-11 12:54:48