Je liste des questions avec cette
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
Mais il y a un problème sur mon serveur,
Incorrect syntax near 'OFFSET'.
Invalid usage of the option NEXT in the FETCH statement.
Comment puis-je modifier ma requête pour SQL Server 2008?
Une dernière question. Comment écrire une procédure stockée pour lister des pages? Voici mon plein de code http://codepaste.net/gq5n6c
Réponse: http://codepaste.net/jjrkqr
Comme indiqué dans les commentaires, l'erreur s'explique par le fait que SQL Server 2008 ne la prend pas en charge. Vous pouvez essayer de modifier la requête en fonction de SQL Server 2012.
Quelque chose comme ça:-
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
Dans votre code: -
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
Le problème est dû au fait que vous n'avez pas défini @page
.
Essayez ceci (car vous n'avez pas mentionné ce qui est @page
. Je le prends comme une constante ou peut-être vous pouvez le déclarer et ensuite en définir la valeur):
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
Pour les personnes utilisant Entity Framework, en particulier la base de données, cette erreur peut se produire si vous développez avec SQL 2012 mais que vous effectuez un déploiement dans une version antérieure.
Le problème se produira si vous utilisez la fonctionnalité Prendre ... Sauter, car SQL 2012 a une nouvelle syntaxe pour cela. Voir:
http://erikej.blogspot.co.uk/2014/12/a-breaking-change-in-entity-framework.html
Le correctif consiste à modifier votre fichier .edmx et à remplacer la valeur de ProviderManifestToken de 2012 par la version de votre base de données, par exemple. 2008.
J'ai rencontré cela lors de l'utilisation de Entity Framework. Je développais sur une machine avec SQL Server 2012. Mais déployé sur une machine avec SQL Server 2008. Au lieu de sauter et d'assumer la requête, j'ai créé une liste ToList () sur celle-ci, puis sautée/reprise. () en mémoire. Pas idéal, mais au moins cela fonctionnera.
Lorsque vous travaillez en équipe avec plusieurs versions de Sql Server, le projet modèle Edmx Modifie la propriété: ProviderManifestToken.
J'ai résolu le problème en le replaçant dans ma version.