sql sql-server sql-server-2008 paging

offset sql server 2008



“Sintaxis incorrecta cerca de ''OFFSET''” modift sql comm 2012 a 2008 (4)

Estoy enumerando preguntas con esto

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

Pero hay un problema en mi servidor,

Incorrect syntax near ''OFFSET''. Invalid usage of the option NEXT in the FETCH statement.

¿Cómo puedo modificar mi consulta para el servidor SQL 2008?

Una pregunta más. ¿Cómo puedo escribir un procedimiento almacenado para listar páginas? Aquí está mi lleno de código http://codepaste.net/gq5n6c

Respuesta: http://codepaste.net/jjrkqr


Como se descubrió en los comentarios, el motivo del error se debe a que SQL Server 2008 no lo admite. Puede intentar cambiar la consulta de acuerdo con SQL Server 2012.

Algo como esto:-

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

En su código: -

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

El problema es porque no has definido @page .

Intente esto (ya que no ha mencionado lo que es @page . Lo tomo como una constante o puede ser, puede declararlo y luego establecer el valor para él):

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


Cuando se trabaja en un equipo con varias versiones fuera de Sql Server, el proyecto Edmx modelo cambia la propiedad: ProviderManifestToken.

Resolví el problema cambiándolo de nuevo a mi versión.


Encontré esto al usar Entity Framework. Estaba desarrollando en una máquina con SQL Server 2012. Pero implementado en una máquina con SQL Server 2008. En lugar de hacer un salto y aceptar la consulta, hice un ToList () en la consulta e hice un salto / tomar esa ToList () en memoria. No ideal, pero al menos funcionará.


Para las personas que usan Entity Framework, en particular la base de datos, este error puede ocurrir si desarrolla con SQL 2012 pero implementa una versión anterior.

El problema se producirá si utiliza la función Tomar ... Omitir, ya que SQL 2012 tiene una nueva sintaxis para esto. Ver:

http://erikej.blogspot.co.uk/2014/12/a-breaking-change-in-entity-framework.html

La solución es editar su archivo .edmx y cambiar el valor de ProviderManifestToken de 2012 a la versión de su base de datos, por ejemplo, 2008.