我的问题是如何在没有使用默认“dbo”模式的SQL Server表上使用
为了更好地理解,我正在尝试将此处给出的R数据库示例应用于自己的表: https://db.rstudio.com/ (向下滚动到标题为“快速示例”的部分)。
一切开始都很顺利。第一节运行良好:
我可以连接到我SQL Server并加载数据库中的表格。我知道这一点是因为
下一行示例代码也可用于我的其中一个表格,返回该表格中列的名称:
我尝试了
那么,我如何在不使用默认“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
?谢谢。