sql - 使用 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'...)
但没有运气。
解决方案
在您链接到的示例中,mtcars
是datawarehouse
. 我将假设mtcars
在您要连接的数据库中。但是您可以使用以下方法进行检查:
'mtcars' %in% DBI::dbListTables(con)
如果要查询特定数据库或模式(不是默认)中的表,则需要使用in_schema
.
没有in_schema
:
tbl(con, 'dbo.mtcars')
生成如下 sql 查询:
SELECT *
FROM "dbo.mtcars"
分隔"
名称的位置。所以在这种情况下,SQL 正在寻找一个名为dbo.mtcars
而不是名为mtcars
in的表dbo
。
与in_schema
:
tbl(con, in_schema('dbo','mtcars'))
生成如下 sql 查询:
SELECT *
FROM "dbo"."mtcars"
所以在这种情况下,SQL 正在寻找一个名为mtcars
in的表dbo
。因为每个术语都是"
单独引用的。
推荐阅读
- android - 如何在 Android 中获取 API 数据
- printf - 使用 printf()(Julia 中的 @printf)打印一个以“0”为底的指数。
- maven - 如何在 Maven 依赖项中引用文件?
- node.js - MongoDB:创建一个单独的集合/模式,其中每个项目都是一个数组,而不是一个对象
- python - 如何在pygame中使一个圆从一个角斜向另一个角移动
- reactjs - 无法从 api 获取数据
- javascript - 将对象推送到数组时,新对象显示为 [[object],[object],[object]] 而不是 [object, object, object]
- php - 用点连接字符串等于
- julia - Julia中的python“as”等价物
- html - 将打字稿参数传递给 html 文件中的 (click) 方法