Okej, så efter mycket sökning och felsökning hittade jag två saker.
1) Min sequelize-instans var sequelize.sequelize
, på grund av en module.exports
med lodash. My bad, jag kom inte ihåg det och nämnde det inte ens i frågan. Jag är ledsen för detta.
2) offset
och limit
använd fetch
och genererar således ogiltig SQL-sintax för SQL 2008.
Jag var tvungen att utföra en råfråga med sequelize.sequelize.query()
(eftersom min instans var sequelize.sequelize).
här är min fullständiga kod, inklusive expressrouting och fult format för frågan:
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});
});
});
Och om du (som jag gjorde) undrar varför sequelize.sequelize
istället för bara sequelize
?
Tja, detta beror på att var sequelize
är en require()
från en fil med följande module.exports
:
module.exports = lodash.extend({
sequelize: sequelize, //reffers to new Sequelize(db,user,pass,{});
Sequelize: Sequelize
}, db)
Så det är därför bara sequelize.query()
returnerades undefined
, och sequelize.sequelize.query()
fungerar bra, för i sanning min sequelize
variabel är ett objekt med sequelize
egenskapen är den verkliga sequelize-anslutningsinstansen.