使用 ODBC 包将 SQL 服务器中的数据保存或读取到 R

Save or Read data from SQL Server in to R using ODBC package

如果我想将 R 连接到数据库,是否还需要为 R 用户安装驱动程序?

我已成功连接到服务器,但无法 read/write/fetch table。

library(odbc)
con <- dbConnect(odbc::odbc(), 
         .connection_string = 'driver={SQL Server};server=DW01;database=AF_DW;trusted_connection=true')

现在我可以在 RStudio 连接中看到 AF_DW。

dbListFields(con, "Visits")

我可以在 table“访问”

中看到所有变量
data <- dbReadTable(con, "Visits")

出现错误:nanodbc/nanodbc.cpp:1655:42000:[Microsoft][ODBC SQL 服务器驱动程序][SQL 服务器] 对象名称无效 'Visits' . [Microsoft][ODBC SQL 服务器驱动程序][SQL 服务器]无法准备语句。 'SELECT * 来自“访问次数”)

data3 <- dbGetQuery(con, "SELECT * FROM Visits")

遇到同样的错误

data4 <- dbSendQuery(con, "SELECT * FROM Visits")

遇到同样的错误

con_in_R <- dbFetch(dbSendQuery(con,"SELECT * FROM Visits"))

(function (cond)) 错误:在为函数 'dbFetch' 选择方法时评估参数 'res' 时出错:nanodbc/nanodbc.cpp:1655: 42000: [Microsoft] [ODBC SQL 服务器驱动程序][SQL 服务器] 对象名称无效 'Visits'。[Microsoft][ODBC SQL 服务器驱动程序][SQL 服务器] 声明( s) 无法准备。'SELECT * FROM Visits'

感谢您的帮助。谢谢。

根据您的图片,Visits 并未存储在默认的 dbo 架构中,正如您所有的查询所假定的那样,而是存储在 eCW 架构下。

与大多数 RDBMS 一样,SQL 服务器遵循对象(tables、存储过程、函数)的三部分名称约定:[database].[schema].[object] 其中数据库对于数据库而言不是必需的dbo 默认值不需要特定的连接和模式。

因此,您需要在尝试的查询中引用架构和 table 名称。

s <- Id(schema = "eCW", table = "Visits")

# READ FROM NON-DEFAULT SCHEMA TABLE
data3 <- dbReadTable(con, s) 
data3 <- dbGetQuery(con, "SELECT * FROM [eCW].[Visits]")

# WRITE TO NON-DEFAULT SCHEMA TABLE
dbWriteTable(conn, s, mydataframe)
dbWriteTable(con, SQL("eCW.Visits"), mydataframe)