如何编写参数化的 SQL 查询?
Posted
技术标签:
【中文标题】如何编写参数化的 SQL 查询?【英文标题】:How to write a parameterized SQL query? 【发布时间】:2014-11-05 10:05:55 【问题描述】:我正在尝试使用此查询根据两个条件从 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)
【问题讨论】:
【参考方案1】:参数化数据非常重要——尤其是从安全角度来看。您拥有的示例是字符串连接,并且受到 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)
文档在这里:https://cran.r-project.org/web/packages/RODBCext/vignettes/Parameterized_SQL_queries.html
更多讨论在这里:Parameterized queries with RODBC
【讨论】:
【参考方案2】:我得到了正确的方法如下:
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),],"'")
【讨论】:
以上是关于如何编写参数化的 SQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章