Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;靠近'的语法不正确;偏移量'&引用;修改sql comm 2012至2008_Sql_Sql Server_Sql Server 2008_Paging - Fatal编程技术网

&引用;靠近'的语法不正确;偏移量'&引用;修改sql comm 2012至2008

&引用;靠近'的语法不正确;偏移量'&引用;修改sql comm 2012至2008,sql,sql-server,sql-server-2008,paging,Sql,Sql Server,Sql Server 2008,Paging,我列出了与此相关的问题 SELECT q.qTitle, q.qDescription, q.qCreatedOn, u.uCode, u.uFullname, qcat.qcatTitle, q.qId, q.qStatus FROM tblQuestion AS q INNER JOIN tblUser AS u ON q.uId = u.uId INNER JOIN tblQuestionCategory AS qcat ON q.qcatId = qcat.qcatId WHER

我列出了与此相关的问题

SELECT q.qTitle, q.qDescription, q.qCreatedOn, u.uCode, u.uFullname, qcat.qcatTitle, q.qId, q.qStatus 
FROM tblQuestion AS q INNER JOIN tblUser AS u 
ON q.uId = u.uId INNER JOIN tblQuestionCategory AS qcat 
ON q.qcatId = qcat.qcatId 
WHERE (q.qStatus = 1) 
ORDER BY q.qCreatedOn DESC 
OFFSET @page*10 ROWS FETCH NEXT 10 ROWS ONLY
但是我的服务器有个问题

Incorrect syntax near 'OFFSET'.
Invalid usage of the option NEXT in the FETCH statement.
如何修改sql server 2008的查询

还有一个问题。如何编写用于列出页面的存储过程?这是我的全部代码


回答:

如评论中所述,错误的原因是SQL Server 2008不支持它。您可以尝试根据SQL Server 2012更改查询

大概是这样的:-

SELECT column1
FROM   (
          SELECT column1, ROW_NUMBER() OVER (ORDER BY column_id) AS x
          FROM   mytable
       ) AS tbl
WHERE  tbl.x BETWEEN 20 AND 30
在代码中:-

SELECT * FROM  
(SELECT ROW_NUMBER() OVER(ORDER BY q.qId) AS rownumber 
FROM tblQuestion AS q 
INNER JOIN tblUser AS u ON q.uId = u.uId 
INNER JOIN tblQuestionCategory AS qcat ON q.qcatId = qcat.qcatId ) as somex 
WHERE  somex.rownumber  BETWEEN 11 AND 20

问题是因为您尚未定义
@page

试试这个(因为你没有提到什么是
@page
。我把它当作常数,或者你可以声明它,然后设置它的值):-


我在使用实体框架时遇到了这种情况。我是在一台装有SQL Server 2012的机器上开发的。但部署在具有SQL Server 2008的计算机上。我对查询执行了ToList(),并对内存中的ToList()执行了skip/take,而不是对查询执行skip-and-take。不太理想,但至少它可以工作。

对于首先使用实体框架(尤其是数据库)的用户,如果使用SQL 2012开发,但部署到早期版本,则可能会发生此错误

如果使用Take…Skip功能,则会出现此问题,因为SQL 2012为此提供了新语法。见:


修复方法是编辑您的.edmx文件,并将ProviderManifestToken值从2012更改为您的数据库版本,例如2008。

在使用多个版本的Sql Server model edmx项目的团队中工作时 更改属性:ProviderManifestToken


我解决了这个问题,把它改回我的版本

不,不,这是个误会。我已经定义了@page。这是完整的关闭代码。以下是sqlserver的输出:我认为它是关于sqlserver版本的(其2010年偏移量不可识别)@tayfun;-我想这可能是因为SQL Server 2008不支持ORDER BY子句(Transact-SQL)这种语法。@tayfun:-检查一下这个SQL小提琴,它对我来说工作得很好:-@tayfun:-没有很好地理解它。我的意思是,这在SQLServer2008中不起作用。你必须使你的查询与之兼容。我有预感,
(@page*10)
可能会解决这个问题。如果没有,请查看文档以查看正式语法。我只是尝试了一下,查询工作正常。谷歌搜索这条消息可以找到一些解决方案,虽然效果不错,但现在是在2008年。在2008年它将如何工作?你也可以检查可能的副本,但当你有这么多记录时,你会讨厌这个解决方案。
declare @page int
set @page = 5  // You may set any value here.

SELECT q.qTitle, q.qDescription, q.qCreatedOn, u.uCode, 
u.uFullname, qcat.qcatTitle, q.qId, q.qStatus 
FROM tblQuestion AS q 
INNER JOIN tblUser AS u ON q.uId = u.uId 
INNER JOIN tblQuestionCategory AS qcat ON q.qcatId = qcat.qcatId 
WHERE (q.qStatus = 1) 
ORDER BY q.qCreatedOn DESC 
OFFSET (@page*10) ROWS
FETCH NEXT 10 ROWS ONLY