可能会感到悲伤,但它来了。导轨执行IN操作
我想对我的Rails中的一个子句执行IN操作。
呼叫是:
@ret = BBOrder.find(:all, :conditions => ["symbol LIKE ? AND creationDateTimeInt IN ?", "%#{symbol}%", "#{date_ints}"])
date_ints
创建之前为阵列,然后对他们有join.(', ')
。我想只是输入一个值,进行试运行
的错误信息是:
BBOrder Load (2.2ms) EXEC sp_executesql N'SELECT [dbo].[BBOrders].* FROM [dbo].[BBOrders] WHERE (symbol LIKE N''%%'' AND creationDateTimeInt IN N''(20130616)'')'
ODBC::Error: 37000 (102) [unixODBC][FreeTDS][SQL Server]Incorrect syntax near '(20130616)'.: EXEC sp_executesql N'SELECT [dbo].[BBOrders].* FROM [dbo].[BBOrders] WHERE (symbol LIKE N''%%'' AND creationDateTimeInt IN N''(20130616)'')'
Completed 500 Internal Server Error in 26ms
ActiveRecord::StatementInvalid (ODBC::Error: 37000 (102) [unixODBC][FreeTDS][SQL Server]Incorrect syntax near '(20130616)'.: EXEC sp_executesql N'SELECT [dbo].[BBOrders].* FROM [dbo].[BBOrders] WHERE (symbol LIKE N''%%'' AND creationDateTimeInt IN N''(20130616)'')'):
app/controllers/pages_controller.rb:43:in `home'
任何想法?
而且我不想做原始SQL查询。这只会大量代码。
ODBC :: Error:22005(245)[unixODBC] [FreeTDS] [SQL Server]转换nvarchar值'20130618,20130617,20130616, 20130614,20130614,20130613,20130612,20130611,20130610'为数据类型int .: EXEC sp_executesql N'SELECT [dbo]。[BBOrders]。* FROM [dbo]。[BBOrders] WHERE(symbol LIKE N''%%' 'AND creationDateTimeInt IN(N''20130618,20130617,20130616,20130615,20130614,20130613,20130612,20130611,20130610' '))' – Alexey
它可以在一个单一的价值,而不是阵列 – Alexey
此方法处理为上。另外 - 不要在阵列上使用.join。保持原样并传入数组本身。 Rails将处理它。 – Alexey