使用DPLYR从链接的SQL Server提取数据

4xy9mtcn  于 6个月前  发布在  SQL Server
关注(0)|答案(2)|浏览(51)

我尝试使用dqdr从链接的SQL Server上的表中提取数据。只要我(1)提供完全限定路径,就可以使用dbGetQuery方法连接和运行查询([服务器名称].[数据库名称].[架构名称].[表名称])和(2)设置不带DB参数的dbConnect方法(这样连接就是到整个服务器,而不是特定的数据库)。如果我试图连接到链接服务器上的数据库,我会得到一个“找不到”错误。
因此,我正在使用服务器级连接,但是当我连接到服务器并试图将数据从SQL表拉入tbl对象时,我得到了一个“对象名称无效”错误。
我正在运行

``tbl(con, dbplyr::in_schema("[server name].[database name].[schema name]", "table name")``

字符串
我尝试了同样的in_catalog没有成功。
有没有一种方法可以在dqr中使用这些方法来从链接的服务器中提取数据?如果可以的话,我宁愿不运行select *
我希望根据链接服务器表中的数据在R studio中创建一个表。我收到一个错误,说我提供了一个“无效的对象名称”。我已经尝试了in_schema和in_catalog。我已经确认了连接细节。

nzk0hqpo

nzk0hqpo1#

这个问题是由in_schema的操作方式引起的。与我的答案here类似,我们需要告诉dbdbodyr server-database-schema字符串已经准备好了sql。

说明

命令dbplyr::in_schema("text1", "text2")希望将所有text1作为模式名,将所有text2作为表名。
这会在以下情况下导致问题:

in_schema("[server name].[database name].[schema name]", "table name")

字符串
因为[server name].[database name].[schema name]不是一个大的模式名,而是三个独立名称的组合。但是,在转换过程中,dbmgr会将整个参数 Package 在分隔符中,以便将其视为单个模式名。

解决方案

值得庆幸的是,有一种方法可以防止dbblog r将整个参数视为单个模式名称:sql()函数告诉dbblog r将其内容视为已经转换为SQL。
所以解决方案是:

in_schema(sql("[server name].[database name].[schema name]"), "table name")


使用此方法时需要额外注意一些事项。由于dbmgr不会应用分隔符,因此最好确保输入有自己的分隔符。

pokxtpni

pokxtpni2#

也可以使用DBI:Id()。例如,Id(schema = "schema name", table = "table name")

相关问题