如何在SQL Server非标准架构表

时间:2017-07-11 10:46:28

标签: r database dplyr dbplyr

我的问题是如何在不使用默认“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?感谢。

1 个答案:

答案 0 :(得分:8)

您可以使用dbplyr::in_schema

在你的情况下:

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