Tay*_*şar 16 sql sql-server paging sql-server-2008
我列出了这个问题
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
Run Code Online (Sandbox Code Playgroud)
但我的服务器出现问题,
Incorrect syntax near 'OFFSET'.
Invalid usage of the option NEXT in the FETCH statement.
Run Code Online (Sandbox Code Playgroud)
如何修改sql server 2008的查询?
还有一个问题.如何编写列出页面的存储过程?这是我的完整代码http://codepaste.net/gq5n6c
Car*_*man 22
对于首先使用Entity Framework,特别是数据库的人来说,如果使用SQL 2012进行开发但部署到早期版本,则会发生此错误.
如果您使用Take ... Skip功能,则会出现此问题,因为SQL 2012有一个新的语法.看到:
http://erikej.blogspot.co.uk/2014/12/a-breaking-change-in-entity-framework.html
修复方法是编辑.edmx文件并将ProviderManifestToken值从2012更改为您的数据库版本,例如2008.
Rah*_*thi 14
正如在评论中发现的那样,错误的原因是因为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
Run Code Online (Sandbox Code Playgroud)
在你的代码中: -
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
Run Code Online (Sandbox Code Playgroud)
问题是因为你还没有定义@page
.
试试这个(因为你没有提到它是什么@page
.我把它作为一些常量或者你可以声明它然后设置它的值): -
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26976 次 |
最近记录: |