我有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 子句而停止工作。
有一个表events,其列starts_at的类型为datetime。
红宝石代码:
@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通过转换(日期,开始时间,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通过转换(日期 ASC,starts_at ASC,112)ASC
请注意 order by 周围的部分:
ORDER BY 转换(日期 ASC,starts_at ASC,112)ASC
而不是 ORDER BY convert(date, starts_at, 112)
因此,我收到以下错误:
TinyTds::Error:关键字“ASC”附近的语法不正确。:
此类查询是否需要遵循一些语法更改,或者我使用的版本不正确?作为从 rails 3.0.1 迁移到 rails 3.0.20 的一部分,我不得不升级 tiny_tds 和 activerecord-sqlserver-adapter
谢谢你。