我尝试使用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。我已经确认了连接细节。
2条答案
按热度按时间nzk0hqpo1#
这个问题是由
in_schema
的操作方式引起的。与我的答案here类似,我们需要告诉dbdbodyr server-database-schema字符串已经准备好了sql。说明
命令
dbplyr::in_schema("text1", "text2")
希望将所有text1
作为模式名,将所有text2
作为表名。这会在以下情况下导致问题:
字符串
因为
[server name].[database name].[schema name]
不是一个大的模式名,而是三个独立名称的组合。但是,在转换过程中,dbmgr会将整个参数 Package 在分隔符中,以便将其视为单个模式名。解决方案
值得庆幸的是,有一种方法可以防止dbblog r将整个参数视为单个模式名称:
sql()
函数告诉dbblog r将其内容视为已经转换为SQL。所以解决方案是:
型
使用此方法时需要额外注意一些事项。由于dbmgr不会应用分隔符,因此最好确保输入有自己的分隔符。
pokxtpni2#
也可以使用
DBI:Id()
。例如,Id(schema = "schema name", table = "table name")
。