rails 3.0.1 と tiny_tds 0.2.3 と activerecord-sqlserver-adapter 3.0.7があり、以下のクエリは正常に機能していました。rails 3.0.20、tiny_tds 0.4.3、activerecord-sqlserver-adapter 3.0.19にアップグレードした後 、 order by 句が原因で動作しなくなりました。
タイプdatetimeの列starts_atを持つテーブルeventsがあります。
ルビーコード:
@events = Event.where("archived = 'False' and starts_at >= ? and event_company_id in (1,2,3)", start_date).select(" distinct top(14) convert(date, starts_at, 112) as start_date").order("convert(date, starts_at, 112)")
次のようにSQLクエリを生成するために使用されます。
SELECT distinct top(14) convert(date, starts_at, 112) as start_date FROM [events] WHERE (archived = 'False' and starts_at >= '2013-02-04' and event_company_id in (1,2,3)) ORDER BY convert(date, starts_at, 112)
しかし今、生成されているクエリは次のとおりです。
SELECT distinct top(14) convert(date, starts_at, 112) as start_date FROM [events] WHERE (archived = 'False' and starts_at >= '2013-02-05' and event_company_id in (1,2,3)) ORDER BY convert(date ASC, starts_at ASC, 112) ASC
order by の周りの部分に注意してください。
ORDER BY convert(date ASC, starts_at ASC, 112) ASC
ORDER BY convert(date, starts_at, 112) の代わりに
このため、次のエラーが発生します。
TinyTds::エラー: キーワード 'ASC' 付近の構文が正しくありません。:
このようなクエリに従う必要がある構文の変更はありますか、それとも使用しているバージョンが正しくありませんか? rails 3.0.1 から rails 3.0.20 への移行の一環として、tiny_tds と activerecord-sqlserver-adapter をアップグレードする必要がありました。
ありがとうございました。