sql >> Database >  >> RDS >> Sqlserver

Pagineer met Sequelize.js op SQL 2008 (dat FETCH niet ondersteunt)

Ok, dus na veel zoeken en debuggen, vond ik 2 dingen.

1) Mijn vervolgexemplaar was sequelize.sequelize , vanwege een module.exports met lodas. Mijn fout, ik herinnerde me dat niet en noemde het niet eens in de vraag. Het spijt me.

2) De offset en limit gebruik wel fetch en genereert dus ongeldige SQL-sintax voor SQL 2008.

Ik moest een onbewerkte zoekopdracht uitvoeren met sequelize.sequelize.query() (aangezien mijn exemplaar sequelize.sequelize was).

hier is mijn volledige code, inclusief express routing en lelijk formaat voor de 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});
      });
});

En als je (zoals ik) je afvraagt ​​waarom sequelize.sequelize in plaats van alleen sequelize ?

Nou, dit komt omdat var sequelize is een require() uit een bestand met de volgende module.exports :

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

Dus dit is waarom gewoon sequelize.query() is geretourneerd undefined , en sequelize.sequelize.query() werkt prima, want in waar mijn sequelize variabele is een Object met de sequelize eigenschap is de echte vervolgverbindingsinstantie.




  1. Vraag om een ​​gemiddelde gewogen prijs te vinden

  2. SQL om automatisch ontbrekende datums en prijs te genereren vanaf de onmiddellijk vorige datum voor ontbrekende datum in tabel

  3. Gegevens tellen in Java MySQL

  4. Door MySql Connector voorbereide instructie draagt ​​slechts 64 bytes over