2017-09-22 5 views
0

Je construis une instruction SQL Query en utilisant inputDateRange() dans R/Shiny. Ma question est dans le traitement des différentes chaînes d'inclure les dates dans la condition WHERE de SQL:Création d'une requête SQL par programmation R/Shiny/RODBC

Voici mon code:

t.query <- paste0("Select [sensor_name], [temperature] from [dbo]. 
[temperature_sensor] where network_id = '24162' and date > " 
, sQuote(format(input$my.dateRange[1], format="%d-%m-%Y")) 
, " and date < " 
, sQuote(format(input$my.dateRange[2], format="%d-%m-%Y")) 
) 

Maintenant, la déclaration se termine par une seule citation et je reçois l'erreur ci-dessous:

42000 102 [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Incorrect syntax near '‘'. [RODBC] ERROR: Could not SQLExecDirect 'Select [sensor_name], [temperature] from [dbo].[temperature_sensor] where network_id = '24162' and date > ‘18-09-2017’ and date < ‘22-09-2017’'

J'ai besoin de fermer la chaîne avec « comme je l'ai commencé dans « sélectionnez ...., j'ai essayé d'ajouter explicitement « » » ou DQUOTE (» «) pour concaténer » mais je rencontre encore une erreur.

Un conseil est très apprécié?

Répondre

0

Je vous recommande d'utiliser RODBCext, qui vous permettra de paramétrer votre requête comme

library(RODBCext) 
channel <- odbcConnect(...) # make your connection object here 
Data <- 
    sqlExecute(channel = channel, 
      query = "Select [sensor_name], [temperature] 
         from [dbo].[temperature_sensor] 
         where network_id = ? and date between ? and ?", 
      data = list('24162', 
         format(input$my.dateRange[1], 
           format = "%Y-%m-%d"), 
         format(input$my.dateRange[2], 
           format = "%Y-%m-%d")), 
      fetch = TRUE, 
      stringsAsFactors = FALSE) 

Cette approche a beaucoup d'avantages, notamment en éliminant la frustration des citations correspondant (que vous ne devriez pas faire parce que de la raison suivante), et protéger vos données contre l'injection SQL.

+0

Beaucoup Merci, wow conseils et repérer sur la solution. – isibrahim