Rails3与SQL Server 2000对话----- ActiveRecord :: JDBCError:'ROW_NUMBER'不是公认的函数名

时间:2011-12-02 12:17:21

标签: ruby-on-rails sql-server activerecord jdbc jruby

一个简单的Rails 3应用程序尝试使用activerecord-jdbc-adapter与SQL Server 2000通信。我试过了microsoft jdbc驱动程序和jtds驱动程序。好像连接数据库好了。

当需要显示数据时,我收到此错误:

PencilsController中的ActiveRecord :: StatementInvalid#show

ActiveRecord :: JDBCError:'ROW_NUMBER'不是公认的函数名称:SELECT t。* FROM(SELECT ROW_NUMBER()OVER(ORDER BY [pencils] .id)AS _row_num,[pencils]。* FROM [pencils ] WHERE [篇笔]。[id] = 1)AS t WHERE t._row_num在1和1之间


2 个答案:

答案 0 :(得分:1)

这里真正的问题是DB不支持正确的LIMIT和OFFSET功能。 Rails 2会遇到同样的问题。

对于我的一个旧项目,我不得不使用Sybase15,它与旧的SQL Server非常相似。要使限制和偏移量与该DB一起工作,我必须编写自己的适配器:

https://github.com/arkadiyk/ar-sybase-jdbc-adapter

它使用可滚动游标来模拟偏移量。您可以尝试使用它与SQL SERVER 2000一样,也可以随意克隆它并根据您的特定需求进行修改。

<强>更新 ROW_NUMBER函数在https://github.com/jruby/activerecord-jdbc-adapter/blob/master/lib/arjdbc/mssql/limit_helpers.rb第82行调用(SqlServerReplaceLimitOffset)

此功能无法替代。还有其他实现OFFSET的方法,但没有直接的方法。

答案 1 :(得分:0)

这有点旧,但如果有人在这里经过,我把另一个使用activerecord-sqlserver-adapter的解决方案放在一起,可以用来将rails 3.2 app连接到sqlserver 2000

https://bitbucket.org/jose_schmidt/rails-sqlserver-adapter-sql-server-2000-friendly