SqlServer:从字符串转换为uniqueidentifier时转换失败

时间:2013-12-05 19:44:32

标签: ruby-on-rails sql-server tiny-tds

User.where('user_id not in (?)', CancelledUser.all.collect(&:id).join(', '))

如果没有取消用户,上面的查询会给我以下错误。

  
    

ActiveRecord :: StatementInvalid:TinyTds :: Error:从字符串转换为uniqueidentifier时转换失败:EXEC sp_executesql N'SELECT [users]。* FROM [userss] WHERE(user_id not in(N'''' ))'

  

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您不想加入ids,这将被视为单个字符串文字。请尝试以下方法:

User.where('user_id not in (?)', CancelledUser.all.collect(&:id))

更新:

直接在SQL Server中执行生成的查询也会产生同样的问题。如果您有空数组,请查看Issue when retrieving records with empty array中有关同一问题的答案。

所以你可以做以下事情来解决这个问题:

cancelled_users = CancelledUser.all.collect(&:id)

if cancelled_users.any?
  User.where('user_id not in (?)', cancelled_users)
else
  User.all
end