WHERE IN子句

时间:2016-01-04 14:28:32

标签: ruby-on-rails sql-server

使用ruby tiny_tds gem我已连接到远程SQL Server数据库以获取一些记录。

我有一个值数组,我将传递给WHERE子句

names = ['Value Number1','800G'].join(',')

results = database.execute("SELECT * FROM Customers WHERE NAME IN(#{names})")

执行上述查询后,我收到以下错误

Incorrect syntax near 'Number1'.

当我手动传递值而不是使用变量

时,它会起作用
results = database.execute("SELECT * FROM Customers WHERE NAME IN('Value Number1','800G')")

我也希望通过使用变量使其正常运行。提前致谢

3 个答案:

答案 0 :(得分:1)

指定变量时会忽略单引号。

在定义数组时,您需要指定单引号。

names = ["'Value Number1'", "'800G'"].join(',')

(抱歉不熟悉ruby,但希望这能为您提供解决问题的想法。)

答案 1 :(得分:1)

使用

names = ["Value Number1", "800G"].map{|i| 
    ActiveRecord::Base.connection.quote(i)
}.join(',')

请注意ActiveRecord::Base.connection.quote对于逃避引号非常重要,否则会破坏您的代码。

但无论如何,以这种方式注入params并不是一个好习惯。 尝试使用sanitize_sql_array和其他方法来避免SQL injection problems

答案 2 :(得分:0)

您生成的sql不正确。所以它应该是

names = [' Value Number1',' 800G']。join("','")

  

"值数字1',' 800G"

results = database.execute(" SELECT * FROM Customers WHERE NAME IN('#{names}')")

  

database.execute(" SELECT * FROM Customers WHERE NAME IN(' Value Number1',' 800G')")