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.