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

Смежные вопросы