Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server R:最佳实践-dplyr和odbc多表操作(从SQL检索)_Sql Server_R_Dplyr_Odbc_Dbplyr - Fatal编程技术网

Sql server R:最佳实践-dplyr和odbc多表操作(从SQL检索)

Sql server R:最佳实践-dplyr和odbc多表操作(从SQL检索),sql-server,r,dplyr,odbc,dbplyr,Sql Server,R,Dplyr,Odbc,Dbplyr,假设您的表存储在SQL server DB中,并且希望执行多表操作,即从同一数据库连接多个表 以下代码可以交互并从SQL server接收数据: library(dplyr) library(odbc) con <- dbConnect(odbc::odbc(), .connection_string = "Driver={SQL Server};Server=.;Database=My_DB;") Table1 <- tbl(con, "Tabl

假设您的表存储在SQL server DB中,并且希望执行多表操作,即从同一数据库连接多个表

以下代码可以交互并从SQL server接收数据:

library(dplyr)
library(odbc)
con <- dbConnect(odbc::odbc(),
                 .connection_string = "Driver={SQL Server};Server=.;Database=My_DB;")

Table1 <- tbl(con, "Table1")
Table1 # View glimpse of Table1

Table2 <- tbl(con, "Table2")
Table2 # View glimpse of Table2

Table3 <- tbl(con, "Table3")
库(dplyr)
数据库(odbc)

con为了建立一个可以容纳多个结果集的连接,我很幸运地使用了以下连接代码:

con <- DBI::dbConnect(odbc::odbc(),
                      Driver = "SQL Server Native Client 11.0",
                      Server = "my_host",
                      UID = rstudioapi::askForPassword("Database UID"),
                      PWD = rstudioapi::askForPassword("Database PWD"),
                      Port = 1433,
                      MultipleActiveResultSets = "True",
                      Database = my_db)
它比DBI连接更快、更稳定,但是,一个小缺点是数据库不会在连接选项卡中弹出以便于参考

对于这两种方法,请记住在完成时关闭连接/池。对于DBI方法,其:

dbDisconnect(con)
而池方法是通过调用以下命令关闭的:

poolClose(pool)

编写sql查询以连接同一数据库中的多个表,并将sql查询直接发送到DB?不要计划在R中对您的表执行数据库操作。在数据库中执行此工作。我认为您需要在每次
tbl()
调用后添加
%%>%collect()
。或者使用
dbReadTable()
。我相信他没有使用collect,因为他想在服务器端执行这些操作。这与@Tim的评论一致当然,完成了!
poolClose(pool)