我正在尝试使用 dplyr 从链接的 SQL Server 上的表中提取数据。只要我 (1) 提供完全限定的路径 ([服务器名称].[数据库名称].[架构名称].[表名称]) 和 (2) 设置,我就可以使用 dbGetQuery 方法连接并运行查询启动不带 DB 参数的 dbConnect 方法(以便连接到整个服务器,而不是特定的 DB)。如果我尝试连接到链接服务器上的数据库,我会收到“未找到”错误。
所以我正在使用服务器级连接,但是当我连接到服务器并尝试将数据从 SQL 表提取到 tbl 对象中时,我收到“无效的对象名称”错误。
我在跑步
``tbl(con, dbplyr::in_schema("[server name].[database name].[schema name]", "table name")``
我已经尝试过与
in_catalog
相同的方法,但没有成功。
有没有办法在 dplyr 中使用这些方法从链接服务器中提取数据?如果可以避免的话,我宁愿不运行
select *
。
我希望根据链接服务器表中的数据在 R studio 中创建一个表。相反,我收到一条错误消息,说我提供了“无效的对象名称”。我尝试过 in_schema 和 in_catalog 。我也确认了连接细节。
这个问题是由
in_schema
的运作方式引起的。与我的回答类似here,我们需要告诉 dbplyr 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]
不是一个大的模式名称,而是三个单独名称的组合。但是,在翻译过程中,dbplyr 将整个参数包装在分隔符中,以便将其视为单个模式名称。
幸运的是,有一种方法可以防止 dbplyr 将整个参数视为单个模式名称:
sql()
函数告诉 dbplyr 将其内容视为已转换为 SQL。
所以解决办法是:
in_schema(sql("[server name].[database name].[schema name]"), "table name")
使用此方法时需要额外小心。因为 dbplyr 不会应用分隔符,所以最好确保您的输入有自己的分隔符。