8

我的问题是如何在不使用默认“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")了,但我得到了同样的Invalid object name错误。同样,当我尝试时dplyr::tbl(con, "dbo.mytable2")(尽管当我排除该dbo部分时它运行良好)。

那么如何在不使用默认“dbo”架构的 SQL Server 表上使用dplyr函数,例如?tbl谢谢。

4

1 回答 1

9

您可以使用dbplyr::in_schema.

在你的情况下:

dplyr::tbl(con, dbplyr::in_schema("abc", "mytable1"))
于 2017-07-11T14:05:00.437 回答