我正在尝试此查询根据两个条件从MS 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 :(得分:2)
参数化数据非常重要 - 尤其是从安全角度来看。您拥有的示例是字符串连接,并且可以进行SQL注入。
RODBCext
包确实支持参数化。
首先 - 标准SQL参数化语法:
SELECT ColA, ColB FROM MyTable where FirstName = ? and LastName = ?
每个?
标记按顺序显示将出现在矢量中的值。无论平台如何,此语法都适用于ODBC。其他人则扩大到支持地位。例如。 OLEDB支持@P1
,@P2
等。
虽然对于您的R查询可能并不重要 - 在多用户系统中,参数化查询执行得更快,因为查询计划由数据库服务器存储(对Oracle和SQL Server都是如此)。
从文档中半剽窃:
library(RODBCext)
connHandle <- odbcConnect("myDatabase")
data <- sqlExecute(connHandle, "SELECT * FROM myTable WHERE column = ?", 'myValue', fetch = TRUE)
odbcClose(connHandle)
文档在这里:Parameterized queries with RODBC
此处有更多讨论:jquery.turbolinks
gem
答案 1 :(得分: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),],"'")