即使有很多行,RODBC 也会返回 0 行

Posted

技术标签:

【中文标题】即使有很多行,RODBC 也会返回 0 行【英文标题】:RODBC returning 0 rows even though there are many rows 【发布时间】:2015-11-10 17:16:43 【问题描述】:

我在 SQL Server 上有这个数据库。当我运行以下查询时:

SELECT * FROM myTable WHERE myDateField <= '2014-12-31'

我得到 51618 行。

但是当我使用 RODBC 从 R 运行完全相同的查询时,我得到“(或 0-length row.names)”。

现在假设我更改了日期:

SELECT * FROM myTable WHERE myDateField <= '2010-01-01'

然后我直接在 SQL Server 和 R 上得到完全相同的结果(!?)。

我找到了这个answer,所以我尝试将believeNRows = FALSErows_at_time = 1 添加到我的odbcDriverConnect 语句中。但这并没有改变什么。

那么,这里可能发生了什么?我已经在这工作了将近 24 小时,但我完全没有想法。

客户端:CentOS 7.1.1503、R 3.2.1、RODBC 1.3-12

服务器:Windows Server 2012、SQL Server 2014

【问题讨论】:

只是为了尝试一些东西......你能在服务器上创建一个由你想要的查询定义的视图,然后在 R 中运行 select * from your_view 吗?另一件事是继续将您的2010-01-01 移近2014-12-31,以查看故障发生的位置。 哈!做到了。正如您所建议的那样,我不断将日期越来越接近 2014-12-31,所以我发现问题出在格式上:当 SQL Server 从RODBC。非常感谢!现在要弄清楚为什么会发生这种情况。 msdn.microsoft.com/en-us/library/ms189491.aspx 解决了!如果你想把你的评论变成一个答案,我会接受它,所以你会得到适当的信任。 【参考方案1】:

您可以做的第一件事是逐步更改工作日期,直到您发现导致查询失败的模式。也许(对于未来的读者)问题在于 SQL Server 期望的格式不是标准。如果是这种情况,那么第一个月第一天的查询将(仅巧合)返回正确的结果。您可以使用set dateformat 让 SQL Server 接受您需要的格式。

【讨论】:

以上是关于即使有很多行,RODBC 也会返回 0 行的主要内容,如果未能解决你的问题,请参考以下文章

即使没有返回行,MySQL/MariaDB FOUND_ROWS 也会返回 1

如果请求 18 行或更多行,为啥使用 RODBC 来自 SAP HANA 的 sqlQuery 不返回数据

即使条件不满足,处理库 CSV 也会继续添加行

即使有足够的空间可用于单词,UILabel 自动换行功能也会留下空间

忽略特定行的 powershell 脚本失败

.Net 正则表达式匹配 $ 与字符串的结尾而不是行的结尾,即使启用了多行