如何在SQL Server非标准架构表上使用dplyr tbl

我的问题是如何在不使用默认“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”)

我得到一个无效的对象名称’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)?谢谢.

解决方法

你可以使用 dbplyr::in_schema.

在你的情况下:

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

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03