Saltar al contenido

Sintaxis incorrecta cerca del comando OFFSET

Revisamos cada escrito en nuestro espacio con el objetivo de enseñarte siempre información certera y actualizada.

Compruebe el nivel de compatibilidad de la base de datos.
OFFSET se agregó en SQL Server 2012, por lo que si su base de datos está en modo de compatibilidad con 2008, esta palabra clave no está disponible.

Ver o cambiar el nivel de compatibilidad de una base de datos

En T-SQL puedes comprobarlo así:

 USE AdventureWorks2012;  
 GO  

 SELECT compatibility_level  
 FROM sys.databases WHERE name = 'AdventureWorks2012';  
 GO

Aquí hay una lista de niveles de compatibilidad tomados de ¿Cómo verificar la compatibilidad de la base de datos de SQL Server después de que sp_dbcmptlevel esté en desuso?:

 65 - SQL Server 6.5
 70 - SQL Server 7.0
 80 - SQL Server 2000
 90 - SQL Server 2005
100 - SQL Server 2008/R2
110 - SQL Server 2012
120 - SQL Server 2014
130 - SQL Server 2016
140 - SQL Server 2017

Además, Azure SQL Data Warehouse y Parallel Data Warehouse no admiten OFFSET cláusula, como se puede ver en los documentos de la ORDER BY cláusula:

-- Syntax for SQL Server and Azure SQL Database  

ORDER BY order_by_expression  
    [ COLLATE collation_name ]   
    [ ASC | DESC ]   
    [ ,...n ]   
[  ]  

 ::=  
   
    OFFSET  integer_constant   ROW   
    [  
      FETCH  FIRST  integer_constant   ROWS  ONLY  
    ]  

-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  

[ ORDER BY   
     DESC ]   
     [ ,...n ]   
]

Mi problema era que estaba tratando de usar OFFSET en una vista, pero no se unía.

Consulta problemática:

declare @PageSize int = 25;
declare @PageNumber int = 1;

with countCte as 
(
    select count(*) as TotalCount from vw_viewName vn
    where 1=1
)
select * from vw_viewName vn
cross join countCte cou
where 1=1
OFFSET @PageSize * (@PageNumber - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY OPTION (RECOMPILE)

Agregar un order by solucionado el problema:

where 1=1
order by vn.ID desc
OFFSET @PageSize * (@PageNumber - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY OPTION (RECOMPILE)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *