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

Sideinddeling med Sequelize.js ved SQL 2008 (der ikke understøtter FETCH)

Ok, så efter masser af søgning og fejlfinding fandt jeg 2 ting.

1) Min sequelize-instans var sequelize.sequelize , på grund af en module.exports med lodash. Min dårlige, det huskede jeg ikke, og nævnte det ikke engang i spørgsmålet. Jeg er ked af dette.

2) offset og limit brug fetch og genererer dermed ugyldig SQL sintax for SQL 2008.

Jeg var nødt til at udføre en rå forespørgsel ved at bruge sequelize.sequelize.query() (da mit eksempel var sequelize.sequelize).

her er min fulde kode, inklusive ekspres routing og grimt format for forespørgslen:

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

Og hvis du (som jeg gjorde) undrer dig over hvorfor sequelize.sequelize i stedet for kun sequelize ?

Nå, det er fordi var sequelize er en require() fra en fil med følgende module.exports :

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

Så det er derfor bare sequelize.query() blev returneret undefined , og sequelize.sequelize.query() fungerer fint, for i sandhed min sequelize variabel er et objekt med sequelize egenskaben er den rigtige sequelize-forbindelsesinstans.




  1. Installation af mysql-libs på server med MySQL-Server5.5

  2. FEJL:mere end én række returneret af en underforespørgsel, der bruges som et udtryk

  3. Postgresql ændre kolonnetype fra int til UUID

  4. Hent indeværende år og næste fra mysql