使用 ODBC 包将数据从 SQL Server 保存或读取到 R
Posted
技术标签:
【中文标题】使用 ODBC 包将数据从 SQL Server 保存或读取到 R【英文标题】:Save or Read data from SQL Server in to R using ODBC package 【发布时间】:2021-03-08 21:34:31 【问题描述】:如果我想将 R 连接到数据库,是否还需要为 R 用户安装驱动程序?
我已成功连接服务器,但无法读取/写入/获取表格。
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")
我可以看到“访问”表中的所有变量
data <- dbReadTable(con, "Visits")
出现错误:nanodbc/nanodbc.cpp:1655: 42000: [Microsoft][ODBC SQL Server Driver][SQL Server]无效的对象名称“访问”。 [Microsoft][ODBC SQL Server Driver][SQL Server]无法准备语句。 'SELECT * FROM "访问")
data3 <- dbGetQuery(con, "SELECT * FROM Visits")
遇到同样的错误
data4 <- dbSendQuery(con, "SELECT * FROM Visits")
遇到同样的错误
con_in_R <- dbFetch(dbSendQuery(con,"SELECT * FROM Visits"))
(函数 (cond) 中的错误:在为函数“dbFetch”选择方法时评估参数“res”时出错:nanodbc/nanodbc.cpp:1655:42000:[Microsoft][ODBC SQL Server Driver][SQL服务器]无效的对象名称“访问”。[Microsoft][ODBC SQL Server Driver][SQL Server]无法准备语句。“SELECT * FROM Visits”
感谢您的帮助。谢谢。
【问题讨论】:
【参考方案1】:根据您的图像,Visits
不像所有查询所假定的那样存储在默认的 dbo
架构中,而是存储在 eCW
架构下。
与大多数 RDBMS 一样,SQL Server 遵循对象(表、存储过程、函数)的三部分命名约定:[database].[schema].[object]
数据库特定连接不需要数据库,dbo
默认不需要架构。
因此,您需要在尝试的查询中引用架构和表名。
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)
【讨论】:
我认为您已正确阅读@Parfait。 AF_DW 是一个数据库(目录),在 AF_DW 内部:DW、eCW、WG 是模式。 Visits 是 eCW 内的一张表。 嗯...看起来这是 R 中的一个已知问题:R DBI ODBC error: nanodbc/nanodbc.cpp:3...。表中可能有很多 large data types(例如,varbinary(max)
、text
、image
)。尝试使用*
:SELECT col1, col2, col3 FROM [eCW].[Visits]
选择列而不是全部。 dbReadTable
按CREATE TABLE
语句的顺序读取所有列。
然后,明确地SELECT
所有需要的列,并选择大数据类型作为非常 last 列以避免早期错误(这不是由于行而是由于列)。如需进一步帮助,请发布schema of your table。需要查看表是否包含大数据类型。
请用这么长的信息更新您的帖子并删除上面的cmets,甚至过去的cmets。再次尝试明确命名您需要的列,就像上面的 R 错误帖子显示一样,将 varbinary
或 text
放在 SELECT
的 end 处。以上是关于使用 ODBC 包将数据从 SQL Server 保存或读取到 R的主要内容,如果未能解决你的问题,请参考以下文章
请教!为何我设置odbc数据源连接sql server数据库连接不上?