2014-11-05 84 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