2014-11-05 26 views
0

我想這個查詢從兩個條件的基礎上從MS SQL數據庫中提取我的值,但我仍然在語法部分得到異常。如何編寫參數化的SQL查詢?

任何人都可以告訴我在R中編寫參數化查詢的正確方法是什麼?

以下是我使用的查詢:

query<- paste0("SELECT [value] FROM [RiskDashboard].[dbo].[tbl_Simulation] 
        where Row_Id=", row_id[c(1),] ," AND Script_Id=", script_id[c(1),] ,) 

T_data<-sqlQuery(ch,query) 

print(T_data) 

回答

0

我得到了正確的方法如下:

query<- paste0("SELECT [Row_Id],[Script_id],[value] FROM 
[RiskDashboard].[dbo].  [tbl_Simulation] where Row_Id='",row_id[c(i),],"' 
AND Script_Id='",script_id[c(i),],"'") 
2

參數化的數據是非常重要的 - 特別是從安全角度考慮。你有的例子是字符串連接,並受SQL注入。

RODBCext軟件包確實支持參數化。

首先 - 標準的SQL語法參數:

SELECT ColA, ColB FROM MyTable where FirstName = ? and LastName = ? 

每個?馬克爲了指示將出現在向量中的值。無論平臺如何,這種語法都適用於ODBC。其他人已擴大到支持位置。例如。 OLEDB支持@P1@P2

雖然也許不是你的R查詢器的重要 - 在一個多用戶系統,因爲查詢計劃是由數據庫服務器(Oracle和SQL服務器的真)存儲參數化查詢執行得更快。

要從文檔半抄襲:

library(RODBCext) 
connHandle <- odbcConnect("myDatabase") 
data <- sqlExecute(connHandle, "SELECT * FROM myTable WHERE column = ?", 'myValue', fetch = TRUE) 
odbcClose(connHandle) 

文檔是在這裏:https://cran.r-project.org/web/packages/RODBCext/vignettes/Parameterized_SQL_queries.html

更多的討論在這裏:Parameterized queries with RODBC