read odbcdriverconnect library example conexion conectar con sql r rodbc

odbcdriverconnect - r sql database



¿Pasa la variable R a sqlQuery de RODBC? (4)

¿Hay alguna forma de pasar una variable definida dentro de R a la función sqlQuery dentro del paquete RODBC?

Específicamente, necesito pasar tal variable a una función escalar / con valores de tabla, a un procedimiento almacenado y / o quizás a la cláusula WHERE de una instrucción SELECT.

Por ejemplo, deja:

x <- 1 ## user-defined

Entonces,

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

O...

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

O...

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

Obviamente, ninguno de estos trabajos, pero estoy pensando que hay algo que permite este tipo de funcionalidad.


Construye la cuerda que intentas pasar. Entonces, en lugar de

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

hacer

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

que completará el valor de x .


Si usa sprintf, puede construir fácilmente la cadena de consulta utilizando la sustitución de variable. Para una mayor facilidad de uso, si pre-analiza esa cadena de consulta (estoy usando stringr) puede escribirla en múltiples líneas en su código.

p.ej

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)

Nota al margen y punta de sombrero a otro R chap

Recientemente descubrí que quería hacer la sustitución de variables aún más simple mediante el uso de la función string.format () de Python, que permite reutilizar y reordenar variables dentro de la cadena.

p.ej

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

Sin embargo, esta función no parece existir en R, así que pregunté por Twitter, y un muy útil @kevin_ushey respondió con su propia función personalizada para ser utilizada en R. ¡Compruébalo!


Con más variables haz esto:

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)


prueba con esto

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