使用 RODBC 的 sqlQuery 时的字符串和 WHERE 子句

Strings and the WHERE clause when using RODBC's sqlQuery

我正在 SQL 服务器中使用 R:

中的 RODBC 查询表

示例:

num = 2
temp <- sqlQuery(conn, sprintf('SELECT "Time", "Temp" 
                                FROM "DataTable" 
                                WHERE "Week_Number" = %s
                                ORDER BY "Time"', num))

这工作正常,但如果我尝试在包含字符串的列上使用 WHERE 子句,我将无法工作

示例:

place_name <- 'London'
temp <- sqlQuery(conn, sprintf('SELECT "Time", "Place" 
                                 FROM "Data_Table" 
                                 WHERE "Place" = %s
                                 ORDER BY "Time"', place_name))

我尝试过各种方法,例如:

place_name <- 'London'

place_name <- \'London\'

place_name <- "'London'"
place_name <- gsub("'", "''", London)

None 这已经奏效了。我收到以下错误消息: “42000 102 [Microsoft][SQL 服务器的 ODBC 驱动程序 11][SQL 服务器] 'London' 附近的语法不正确。”

有什么建议吗?

万一其他人感兴趣,我找到了解决方案。我安装了 RODBCext 包,它提供对参数化查询的支持。我使用了以下代码:

query <- 'SELECT "Time", "Place" FROM "Data_Table" WHERE "Place" = ?'
temp <- sqlExecute(conn, query, 'London', fetch = TRUE)

这里有一些关于使用 RODBCext 的有用信息:RODBCext