Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Paginieren mit Sequelize.js bei SQL 2008 (das FETCH nicht unterstützt)

Ok, nach viel Suchen und Debuggen habe ich 2 Dinge gefunden.

1) Meine Sequelize-Instanz war sequelize.sequelize , aufgrund eines module.exports mit Lodash. Meine Güte, daran konnte ich mich nicht erinnern und habe es in der Frage nicht einmal erwähnt. Das tut mir leid.

2) Der offset und limit Verwenden Sie fetch und generiert somit eine ungültige SQL-Syntax für SQL 2008.

Ich musste eine Rohabfrage mit sequelize.sequelize.query() durchführen (da meine Instanz sequelize.sequelize war).

Hier ist mein vollständiger Code, einschließlich Express-Routing und hässlichem Format für die Abfrage:

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

Und wenn Sie sich (so wie ich) fragen, warum sequelize.sequelize statt nur sequelize ?

Nun, das liegt daran, dass var sequelize ist ein require() aus einer Datei mit folgendem module.exports :

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

Deshalb einfach sequelize.query() wurde undefined zurückgegeben , und sequelize.sequelize.query() funktioniert gut, weil in Wahrheit mein sequelize Variable ist ein Objekt mit dem sequelize Eigenschaft, die die eigentliche Sequelize-Verbindungsinstanz ist.