如何在 SQL Server 非标准模式表上使用 dplyr tbl

9
我的问题是如何在没有使用默认“dbo”模式的SQL Server表上使用dplyr函数,例如tbl
为了更好地理解,我正在尝试将此处给出的R数据库示例应用于自己的表: https://db.rstudio.com/ (向下滚动到标题为“快速示例”的部分)。
一切开始都很顺利。第一节运行良好:
install.packages("dplyr")
install.packages("odbc")
install.packages("dbplyr")
install.packages("DBI")

con <- DBI::dbConnect(odbc::odbc(),
                   Driver    = "SQL Server", 
                   Server    = [My Server Name],
                   Database  = "mydatabase",
                   UID       = [My User ID],
                   PWD       = [My Password],
                   Port      = 1433)

我可以连接到我SQL Server并加载数据库中的表格。我知道这一点是因为DBI::dbListTables(con)返回了我可用表格的名称(但没有架构)。
下一行示例代码也可用于我的其中一个表格,返回该表格中列的名称: DBI::dbListFields(con, "mytable1") 然而,一旦我尝试运行下一行: dplyr::tbl(con, "mytable1") 我会得到一个 Invalid object name 'mytable1' 错误,而不是预期的表格。当我在另一个表格 mytable2 上运行相同的代码时,不会出现这个错误。这次,如预期的那样,当我运行以下代码时,我获得了 mytable2 的预览: dplyr::tbl(con, "mytable2") mytable1 和 mytable2 之间的一个差异是它们的模式。mytable1 使用编造的"abc"架构,即`mydatabase.abc.mytable1` 。mytable2 使用默认的 "dbo" 架构,即 `mydatabase.dbo.mytable2` 。
我尝试了dplyr::tbl(con, “abc.mytable1”) ,但我收到相同的“无效对象名称”错误。同样,当我尝试 dplyr::tbl(con, “dbo.mytable2”) 时(尽管当我排除dbo部分时运行良好)也会出现此错误。
那么,我如何在不使用默认“dbo”模式的 SQL Server 表上使用 dplyr 函数,例如 tbl?谢谢。
1个回答

10
你可以使用 dbplyr::in_schema
在你的情况下:
dplyr::tbl(con, dbplyr::in_schema("abc", "mytable1"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接