如何编写参数化SQL查询?

时间:2014-11-05 10:05:56

标签: sql-server r rodbc

我正在尝试此查询根据两个条件从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)

2 个答案:

答案 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),],"'")