【发布时间】:2015-12-22 02:31:05
【问题描述】:
所以,我正在使用带有tedious的 sequelize.js 以获得 mssql 支持。 MSSQL = SQL Server 2008
嗯,所以有一个名为 Clientes 的大表。我必须从中获取数据,但它非常庞大,所以我必须分页
我尝试了“正确的方法”,如文档中所述:
app.use('/clientes', function(req, res){
var page = req.params.page || 0;
sequelize.Clientes.findAll({limit: 30, offset: 5 })
.then(function(result) {
res.json({result: result});
});
});
它应该可以工作,但它使用的查询类似于
SELECT .......... from [Clientes] as [Clientes] ORDER BY [CNPJ] OFFSET 5 ROWS FETCH NEXT 30 ROWS ONLY; 和 SQL Server 返回一个糟糕的Invalid usage of the option NEXT in the FETCH statement!
所以,经过大量搜索后,我发现 FETCH 显然不适用于 SQL 2008。话虽如此(很遗憾),但我试图将 TDS 版本强制为 7_3_A。我是用
做的dialectOptions: {
tdsVersion: '7_3_A'
},
但是查询 sintax 并没有因此改变:(
我不知道该做什么了....我什至会使用另一种方式来代替分页...我找到了一个很好的 SQL 分页语法(涉及row_number()),但我无法执行它作为对 sequelyze 的原始查询。 myModel.query('SQL QUERY HERE')返回未定义函数oO'
任何帮助将不胜感激
【问题讨论】:
-
您需要调用
sequelize.query(续集实例),而不是myModel.query(模型)。如果您有一个不错的限制和偏移实现,请随时将其发布到 github.com/sequelize/sequelize/issues 或打开拉取请求 -
@JanAagaardMeier,对不起,我错了,我正在使用 sequelize.query('Select.....') 并得到了未定义的函数.. 但我会仔细检查并让你知道......好吧,我拥有并且应该工作的是一个简单的 SQL 查询,它使用
ROW_NUMBER() OVER(ORDER BY...) -
嘿@JanAagaardMeier,我做了
sequelize.query('SELECT * FROM (SELECT t.id, ROW_NUMBER() OVER (ORDER BY t.cnpj) as rownum FROM (SELECT t1.cnpj FROM Clientes t1) as t) AS u WHERE u.rownum > 5 AND u.rownum <= 10')并得到了typeError: undefined is not a function我尝试了require('sequelize')和我的实例
标签: sql-server sql-server-2008 express pagination sequelize.js