Передать переменную R в SqlQuery RODBC?[дубликат]

StackOverflow https://stackoverflow.com/questions/4330072

  •  29-09-2019
  •  | 
  •  

Вопрос

Есть ли какой-либо способ передать переменную, определенную в 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)")

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

Это было полезно?

Решение

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

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

делай

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

который будет заполнять значение x.

Другие советы

Если вы используете 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-парню

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

например ,

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

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

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

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

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

  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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top