【问题标题】:Rails3 talks to SQL Server 2000-----ActiveRecord::JDBCError: 'ROW_NUMBER' is not a recognized function nameRails3 与 SQL Server 2000 对话-----ActiveRecord::JDBCError: 'ROW_NUMBER' 不是可识别的函数名
【发布时间】:2013-06-06 22:40:55
【问题描述】:

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

显示数据时出现此错误:

ActiveRecord::StatementInvalid in PencilsController#show

ActiveRecord::JDBCError: 'ROW_NUMBER' 不是可识别的函数名。: SELECT t.* FROM (SELECT ROW_NUMBER() OVER(ORDER BY [pencils].id) AS _row_num, [pencils].* FROM [pencils ] WHERE [pencils].[id] = 1) AS t WHERE t._row_num BETWEEN 1 AND 1


【问题讨论】:

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


【解决方案1】:

这里真正的问题是数据库不支持正确的 LIMIT 和 OFFSET 函数。 Rails 2 也会有同样的问题。

对于我的一个旧项目,我不得不使用 Sybase15,它与旧的 SQL Server 非常相似。为了使用该数据库进行限制和偏移,我必须编写自己的适配器:

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 的方法,但没有直接的方法。

【讨论】:

  • 谢谢。知道问题的根源在哪里会很有帮助。您如何看待将休眠与 jruby on rails 3 项目结合使用的想法?你觉得可行吗?
  • 我错了。显然 SQLServer2000 应该由activerecord-jdbc-adapter 支持:github.com/jruby/activerecord-jdbc-adapter/issues/…
【解决方案2】:

这有点老了,但如果有人经过这里,我会整理另一个使用 activerecord-sqlserver-adapter 的解决方案,可用于将 rails 3.2 应用程序连接到 sqlserver 2000

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

【讨论】:

  • 谢谢,你的仓库非常有用。我已将您的代码与 Github 存储库混合,因此您可以将其添加到 Gemfile: gem 'activerecord-sqlserver-adapter', :git => "git@github.com:iox/activerecord-sqlserver-adapter.git"
  • 太棒了!我很高兴它帮助别人
猜你喜欢
  • 2013-03-14
  • 2011-05-04
  • 2017-02-08
  • 2011-09-23
  • 1970-01-01
  • 2020-12-06
  • 2012-08-29
  • 2021-06-06
相关资源
最近更新 更多