查询在 SQL 服务器中有效,但在 R 中无效

Query works in SQL Server but not in R

我在 SQL 服务器上写了一个查询,它 运行 没问题。这是出于隐私原因更改名称的查询。

SELECT *
FROM table1 (nolock)
LEFT JOIN table2 (nolock)
ON table1.ID = table2.ID
WHERE table1.Date = '2021-03-05' AND table1.ID = '120';

这很好用,可以提取 30k 行。我已经使用 DBIodbc 包创建了一个 ODBC 连接到 R 中的服务器。我可以 运行 来自 R 的查询就好了。我 运行 很多都没有问题。例如,这个 运行s 没有错误:

DBI::dbGetQuery(conn, believeNRows = FALSE, "
    SELECT TOP 10 *
    FROM table1 (nolock);
")

但是当我包含 LEFT JOIN 时,R 中的查询失败并且 returns 出现错误。

这是 R 中的相同查询:

DBI::dbGetQuery(conn, believeNRows = FALSE, "
    SELECT *
    FROM table1 (nolock)
    LEFT JOIN table2 (nolock)
    ON table1.ID = table2.ID
    WHERE table1.Date = '2021-03-05' AND table1.ID = '120';
")

我在 VSCode 工作,所以错误消息的信息不是很丰富:

Error in app$vspace(new_style$margin-top %||% 0) : attempt to apply non-function

根据其他一些答案,我在查询中包含了几个额外的选项,但它们没有帮助:

DBI::dbGetQuery(conn, believeNRows = FALSE, "
    SET ANSI_WARNINGS OFF;
    SET NOCOUNT ON;

    SELECT *
    FROM table1 (nolock)
    LEFT JOIN table2 (nolock)
    ON table1.ID = table2.ID
    WHERE table1.Date = '2021-03-05' AND table1.ID = '120';
")

有谁知道为什么这个非常好的查询在从 R 内部传递到 SQL 服务器时不起作用?

万一其他人以后遇到这个问题,我有两个障碍。首先,相对于@r2evans 的评论,我的错误消息被屏蔽了。根据 a readr github issue,我重新安装了 cli 软件包并开始收到未屏蔽的错误消息。重新运行我的代码并收到此错误:

Error:
! Column names `ID1` and `Col1` must not be duplicated.
Use .name_repair to specify repair.
Caused by error in `stop_vctrs()`:
! Names must be unique.
x These names are duplicated:
  * "ID1" at locations 3 and 72.
  * "Col1" at locations 45 and 75.
Run `rlang::last_error()` to see where the error occurred.

事实证明,SQL 调用会带回所有列,SSMS 会自动删除重复的列。另一方面,R 没有。所以我更改了 SELECT 子句以选择我想要的特定列并且代码有效。