Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Impagina con Sequelize.js in SQL 2008 (che non supporta FETCH)

Ok, quindi dopo molte ricerche e debug, ho trovato 2 cose.

1) La mia istanza di sequelize era sequelize.sequelize , a causa di un module.exports con lodash. Mio male, non me lo ricordavo e non l'ho nemmeno menzionato nella domanda. Mi dispiace per questo.

2) Il offset e limit usa fetch e quindi genera una sintassi SQL non valida per SQL 2008.

Ho dovuto eseguire una query grezza, utilizzando sequelize.sequelize.query() (dal momento che la mia istanza era sequelize.sequelize).

ecco il mio codice completo, incluso il routing rapido e il formato brutto per la query:

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});
      });
});

E se tu (come me) ti chiedi perché sequelize.sequelize invece di solo sequelize ?

Bene, questo è perché var sequelize è un require() da un file con il seguente module.exports :

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

Quindi questo è il motivo per cui solo sequelize.query() è stato restituito undefined e sequelize.sequelize.query() funziona bene, perché in true il mio sequelize variabile è un Oggetto con sequelize la proprietà è la vera istanza di connessione di sequele.