如何在 SQL 服务器 non-standard 架构 table 上使用 dplyr tbl

How to use dplyr tbl on a SQL Server non-standard schema table

我的问题是如何在不使用默认 "dbo" 的 SQL 服务器 table 上使用 dplyr 函数,例如 tbl ] 模式?

有关更多上下文,我正在尝试将此处给出的 R 数据库示例应用到我自己的 tables: https://db.rstudio.com/(向下滚动到标题部分 "Quick Example")。

开始还不错。第一部分运行很好:

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 服务器并加载到我的数据库中的 table。我知道这是因为

DBI::dbListTables(con)

returns 我可用的 table 的名称(但没有任何模式)。

下一行示例代码在应用于我自己的 table 时也有效,返回 table 中列的名称。

DBI::dbListFields(con, "mytable1")

但是,一旦我尝试 运行 下一行:

dplyr::tbl(con, "mytable1")

我收到 Invalid object name 'mytable1' 错误,而不是示例中预期的 table 预览。

当我运行在不同的table上使用相同的代码时,我的table2不会出现此错误。这一次,正如预期的那样,当我 运行:

时,我得到了 table2 的预览

dplyr::tbl(con, "mytable2")

mytable1 和 mytable2 之间的一个区别是架构。 mytable1 使用 made-up "abc" 模式,即 mydatabase.abc.mytable1。 mytable2 使用默认的 "dbo" 模式,即 mydatabase.dbo.mytable2.

我试过 dplyr::tbl(con, "abc.mytable1") 但我得到了同样的 Invalid object name 错误。同样,当我尝试 dplyr::tbl(con, "dbo.mytable2") 时(尽管当我排除 dbo 部分时它 运行 没问题)。

那么如何在不使用默认 "dbo" 模式的 SQL 服务器 table 上使用 dplyr 函数,例如 tbl ?谢谢。

您可以使用 dbplyr::in_schema.

你的情况:

dplyr::tbl(con, dbplyr::in_schema("abc", "mytable1"))