Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Stronicowanie za pomocą Sequelize.js w SQL 2008 (który nie obsługuje FETCH)

Ok, więc po wielu poszukiwaniach i debugowaniu znalazłem 2 rzeczy.

1) Moja instancja sequelize to sequelize.sequelize , ze względu na module.exports z lodaszem. Mój zły, nie pamiętałem tego i nawet nie wspomniałem o tym w pytaniu. Przepraszam za to.

2) offset i limit użyj fetch i w ten sposób generuje nieprawidłową składnię SQL dla SQL 2008.

Musiałem wykonać surowe zapytanie, używając sequelize.sequelize.query() (ponieważ moja instancja to sequelize.sequelize).

oto mój pełny kod, w tym ekspresowy routing i brzydki format zapytania:

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

A jeśli (tak jak ja) zastanawiasz się, dlaczego sequelize.sequelize zamiast tylko sequelize ?

Cóż, to dlatego, że var sequelize jest require() z pliku z następującym module.exports :

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

Dlatego właśnie sequelize.query() został zwrócony undefined i sequelize.sequelize.query() działa dobrze, ponieważ w rzeczywistości moja sequelize zmienna jest obiektem z sequelize właściwość będąca prawdziwą instancją połączenia sekwencyjnego.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP, ORM, MSSQL i Unicode, czy można je połączyć?

  2. Konwertuj „smalldatetime” na „datetime2” w SQL Server (przykłady T-SQL)

  3. Konwertuj „datetime2” na „date” w SQL Server (przykłady T-SQL)

  4. jak napisać zapytanie SQL dla tego wyniku?

  5. Wyszukiwanie następnego wiersza w zapytaniu SQL i usuwanie go tylko wtedy, gdy poprzedni wiersz pasuje