即使有很多行,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 = FALSE
和rows_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 不返回数据