2016-02-25 35 views
0

我查詢R中使用RODBC在SQL Server表時,WHERE子句:字符串和使用RODBC的sqlquery的

例子:

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)) 

我個人有T例如:

place_name <- 'London' 

place_name <- \'London\' 

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

這一切都沒有奏效。我收到以下錯誤消息: 「42000 102 [Microsoft] [用於SQL Server的ODBC驅動程序11] [SQL Server]'London'附近的語法錯誤。」

有什麼建議嗎?

+0

你試過把佔位符用雙引號?例如' 「%S」'? – joran

+0

嗨@joran,謝謝你的建議。我確實嘗試過,並且出現以下錯誤:[1]「42S22 207 [Microsoft] [ODBC驅動程序11 for SQL Server] [SQL Server]無效的列名稱''London''。」 [2]「[RODBC] ERROR:Could not SQLExecDirect'SELECT \」Time \「\ n FROM \」DataTable \「\ n WHERE \」place_name \「= \」'/ London'\「\ ORDER BY \」時間\」'」 –

回答

0

如果有其他人有興趣,我找到了解決方案。我安裝了RODBCext軟件包,它提供了對參數化查詢的支持。我用下面的代碼:

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

這是一個關於使用RODBCext的一些有用的信息:RODBCext