首页 > 解决方案 > 使用 DBplyr 连接到数据库

问题描述

问题

我正在尝试使用此处的说明使用 dbplyr 连接到本地的 SQL Server,但我一直收到错误消息

无效的对象名称

为简单起见,我在上面链接的说明中使用了与 RStudio 相同的对象命名约定。

产生错误的代码

我使用 dbConnect 建立连接:

con <- dbConnect(odbc::odbc(),
             .connection_string = "Driver={SQL Server};server=DO1COMMONSQL01\\COMMON1D;database=datawarehouse;trusted_connection=Yes",
             timeout = 10)

我知道已经成功,因为我可以在连接选项卡中看到数据库及其表。

然后我去调用一个简单的管道dbplyr

tbl(con, 'mtcars') %>%
  summarise(Count = n())

这是我收到错误消息的地方:

错误:nanodbc/nanodbc.cpp:1617: 42000: [Microsoft][ODBC SQL Server Driver][SQL Server]无效的对象名称“mtcars”。

我已经尝试过这个主题的其他变体,例如tbl(con, 'dbo.mtcars')...tbl(con, 'datawarehouse.dbo.mtcars'...)但没有运气。

标签: sqlrdbplyr

解决方案


在您链接到的示例中,mtcarsdatawarehouse. 我将假设mtcars在您要连接的数据库中。但是您可以使用以下方法进行检查:

'mtcars' %in% DBI::dbListTables(con)

如果要查询特定数据库或模式(不是默认)中的表,则需要使用in_schema.

没有in_schema

tbl(con, 'dbo.mtcars')

生成如下 sql 查询:

SELECT *
FROM "dbo.mtcars"

分隔"名称的位置。所以在这种情况下,SQL 正在寻找一个名为dbo.mtcars而不是名为mtcarsin的表dbo

in_schema

tbl(con, in_schema('dbo','mtcars'))

生成如下 sql 查询:

SELECT *
FROM "dbo"."mtcars"

所以在这种情况下,SQL 正在寻找一个名为mtcarsin的表dbo。因为每个术语都是"单独引用的。


推荐阅读