Rails3 общается с SQL Server 2000 ----- ActiveRecord :: JDBCError: 'ROW_NUMBER' не является распознанным именем функции - PullRequest
1 голос
/ 02 декабря 2011

Простое приложение Rails 3 пытается установить связь с SQL Server 2000 с помощью activerecord-jdbc-adapter. Я пробовал и Microsoft JDBC драйвер и JTDS драйвер. Кажется, для подключения к базе данных в порядке.

когда пришло время ПОКАЗАТЬ данные, я получаю эту ошибку:

ActiveRecord :: StatementInvalid в PencilsController # show

ActiveRecord :: JDBCError: 'ROW_NUMBER' не является распознанным именем функции .: SELECT t. * FROM (SELECT ROW_NUMBER () OVER (ORDER BY [карандаши] .id) AS _row_num, [карандаши]. * FROM [карандаши] ] ГДЕ [карандаши]. [Id] = 1) КАК ГДЕ t._row_num МЕЖДУ 1 И 1


Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Настоящая проблема здесь заключается в том, что БД не поддерживают надлежащие функции 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, но прямого пути не существует.

0 голосов
/ 06 июня 2013

Это довольно старый, но если кто-то проходит здесь, я собрал другое решение, использующее activerecord-sqlserver-adapter, которое можно использовать для подключения приложения rails 3.2 к sqlserver 2000

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

...