Подтвердить что ты не робот

Передать переменную R в RODBC sqlQuery?

Есть ли способ передать переменную, определенную внутри R, в функцию sqlQuery в пакете RODBC?

В частности, мне нужно передать такую ​​переменную в функцию скалярного/табличного значения, хранимую процедуру и/или, возможно, предложение WHERE инструкции SELECT.

Например, пусть:

x <- 1 ## user-defined

Затем

example <- sqlQuery(myDB,"SELECT * FROM dbo.my_table_fn (x)")

Или...

example2 <- sqlQuery(myDB,"SELECT * FROM dbo.some_random_table AS foo WHERE foo.ID = x")

Или...

example3 <- sqlQuery(myDB,"EXEC dbo.my_stored_proc (x)")

Очевидно, что ни одна из этих функций не работает, но я думаю, что есть что-то, что позволяет такую ​​функциональность.

4b9b3361

Ответ 1

Создайте строку, которую вы собираетесь передать. Поэтому вместо

example <- sqlQuery(myDB,"SELECT * FROM dbo.my_table_fn (x)")

делать

example <- sqlQuery(myDB, paste("SELECT * FROM dbo.my_table_fn (", 
                                x, ")", sep=""))

который заполнит значение x.

Ответ 2

Если вы используете sprintf, вы можете легко построить строку запроса с помощью замены переменных. Для дополнительной простоты использования, если вы предварительно разобрали эту строку запроса (я использую stringr), вы можете записать ее по нескольким строкам в своем коде.

например.

q1 <- sprintf("
               SELECT basketid, count(%s)
               FROM %s
               GROUP BY basketid
              "
              ,item_barcode
              ,dbo.sales
              )
q1 <- str_replace_all(str_replace_all(q1,"\n",""),"\\s+"," ")
df <- sqlQuery(shopping_database, q1)

Боковое примечание и шляпка к другому R-чату

Недавно я обнаружил, что хочу сделать замену переменных еще проще, используя что-то вроде функции Python string.format(), которая позволяет повторно использовать и изменять порядок переменных в строке

например.

$: w = "He{0}{0}{1} W{1}r{0}d".format("l","o")
$: print(w)
"Hello World"

Однако эта функция, похоже, не существует в R, поэтому я спросил в Twitter, и очень полезный chap @kevin_ushey ответил своей собственной пользовательской функцией, которая будет использоваться в R. Проверьте это!

Ответ 3

попробуйте с этим

x <- 1
example2 <- fn$sqlQuery(myDB,"SELECT * FROM dbo.some_random_table AS foo WHERE foo.ID = '$x'")

Ответ 4

С большим количеством переменных сделайте следующее:

  aaa <- "
      SELECT   ColOne, ColTwo 

FROM    TheTable 

 WHERE  HpId =  AAAA            and

  VariableId = BBBB     and 

  convert (date,date )  < 'CCCC'
  "


--------------------------

  aaa <- gsub ("AAAA",  toString(111),aaa)

  aaa <- gsub ("BBBB",  toString(2222),aaa)

  aaa <- gsub ("CCCC",  toString (2016-01-01) ,aaa)