一个失败后如何从未来的dplyr查询中收集数据?

时间:2018-01-23 17:34:35

标签: sql-server r dplyr dbplyr

通常当我尝试从SQL Server数据库中收集大量数据时,我会从nanodbc驱动程序收到一条神秘的错误消息。例如,

library(dplyr)
res <- collect(tbl(con, "result"))
  

result_fetch中的错误(res @ ptr,n,...):nanodbc / nanodbc.cpp:2525:08S01:[Microsoft] [SQL Server的ODBC驱动程序11] SSL提供程序:[错误

     

结果已经清除

从那时起,我收到了错误

  

错误:&#39; SELECT * FROM&#34;结果&#34; AS&#34; zzz13&#34;在哪里(0 = 1)&#39; nanodbc / nanodbc.cpp:1587:08S01:[Microsoft] [SQ的ODBC驱动程序11

每当我尝试从数据库中的表中收集数据时。这一直持续到我重新启动R会话。

有没有人见过这种行为或者可以提供解决方法?

1 个答案:

答案 0 :(得分:2)

肯定会发生此错误的一种情况: 当表格中有varchar类型的列时。 您只需在rstudio中的“连接”窗格上单击,转到相关表并检查列类型即可进行检查。

如果麻烦的列是varchar_col1,那么

sometbl <- tbl(con, in_schema("schema_name","table_with_trouble"))
sometbl %>% head()

应该重现您的错误。

我不确定为什么会发生这种情况,但这是一种解决方法:

sometbl <- tbl(con, in_schema("schema_name","table_with_trouble")) %>%
    mutate(alt_col1 = as.character(varchar_col1)) %>%
    select(-varchar_col1)
sometbl %>% head()

应该工作。