sql >> Base de Datos >  >> RDS >> Sqlserver

Paginar con Sequelize.js en SQL 2008 (que no es compatible con FETCH)

Bien, después de muchas búsquedas y depuraciones, encontré 2 cosas.

1) Mi instancia de secuenciación fue sequelize.sequelize , debido a un module.exports con lodash. Mala mía, no me acordaba de eso, y ni siquiera lo mencioné en la pregunta. Lo siento por esto.

2) El offset y limit usa fetch y, por lo tanto, genera una sintaxis de SQL no válida para SQL 2008.

Tuve que realizar una consulta sin procesar, usando sequelize.sequelize.query() (ya que mi instancia fue sequelize.sequelize).

aquí está mi código completo, incluido el enrutamiento rápido y el formato desagradable para la consulta:

var express = require('express')
var app = express();

app.use('/tableName', function(req, res){
    var page = req.params.page || 2;
    var rowsPerPage = req.params.perpage || 30;

    if(rowsPerPage > 100){ 
        rowsPerPage = 100; //this limits how many per page
    }

    var theQuery = 'declare @rowsPerPage as bigint; '+
        'declare @pageNum as bigint;'+
        'set @rowsPerPage='+rowsPerPage+'; '+
        'set @pageNum='+page+';   '+
        'With SQLPaging As   ( '+
        'Select Top(@rowsPerPage * @pageNum) ROW_NUMBER() OVER (ORDER BY ID asc) '+
        'as resultNum, * '+
        'FROM tableName )'+
        'select * from SQLPaging with (nolock) where resultNum > ((@pageNum - 1) * @rowsPerPage);';


    sequelize.sequelize.query(theQuery) 
     .spread(function(result) {
        res.json({result: result});
      });
});

Y si usted (como yo lo hice) se pregunta por qué sequelize.sequelize en lugar de solo sequelize ?

Bueno, esto se debe a que var sequelize es un require() desde un archivo con el siguiente module.exports :

 module.exports = lodash.extend({
  sequelize: sequelize, //reffers to new Sequelize(db,user,pass,{});
  Sequelize: Sequelize
 }, db)

Esta es la razón por la que solo sequelize.query() fue devuelto undefined y sequelize.sequelize.query() funciona bien, porque en verdad mi sequelize variable es un Objeto con sequelize la propiedad es la instancia de conexión de secuencia real.