私はこれで質問をリストしています
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のクエリを変更するにはどうすればよいですか?
もう一つ質問。ページを一覧表示するためのストアドプロシージャを作成するにはどうすればよいですか?ここに私の完全なコードがあります http://codepaste.net/gq5n6c
コメントでわかるように、エラーの理由は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
とは何も言及していません。定数と見なしていますか、宣言してから値を設定できます)。
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
Entity Framework、特にデータベースを最初に使用している場合、SQL 2012を使用して開発し、以前のバージョンにデプロイすると、このエラーが発生する可能性があります。
SQL 2012には新しい構文があるため、Take ... Skip機能を使用すると問題が発生します。見る:
http://erikej.blogspot.co.uk/2014/12/a-breaking-change-in-entity-framework.html
修正は、.edmxファイルを編集して、ProviderManifestToken値を2012からデータベースバージョンに変更することです。 2008年.
Entity Frameworkを使用しているときにこれに遭遇しました。私はSQL Server 2012を備えたマシンで開発していましたが、SQL Server 2008を備えたマシンにデプロイしました。スキップしてクエリを実行する代わりに、クエリでToList()を実行し、そのToListをスキップ/テイクしました()メモリ内。理想的ではありませんが、少なくとも機能します。
Sql Serverに複数のバージョンがあるチームで作業する場合、モデルEdmxプロジェクトはプロパティを変更します:ProviderManifestToken。
私のバージョンに戻すことで問題を解決しました。