RODBC查询返回Windows的结果,但不返回Linux的结果

时间:2014-10-09 22:04:38

标签: r rodbc rapache

我有一个R脚本从Windows上的R studio获取SQL查询的结果,而不是Linux上的Rapache。我的两个连接字符串是:

channel = odbcDriverConnect('Driver=FreeTDS;Server=server\\instance;Database=DB;Uid=name;Pwd=password')
channel = odbcDriverConnect('Driver={SQL Server};Server=name\\instance;Database=DB;Trusted_Connection=True;')

我构造了一些SQL并将其传递给这个函数:

get_sql_data <- function(query,as.is=TRUE){
  return(sqlQuery(channel, query,as.is=as.is, errors=TRUE))
}

我查看SQL配置文件,并查看来自Rapache的查询的BatchStarting和BatchCompleted事件。我将查询复制并传递到SSDT并返回行。在Rstudio中,我可以查看()结果数据帧。在rapache中,我这样说:

warning('head head')
warning(head(RESULTS))
warning('head tail')

我得到以下内容:

2: In eval(expr, envir, enclos) : head head 3: In eval(expr, envir, enclos) : 4: In eval(expr, envir, enclos) : head tail

我做错了什么?我需要使用sqlGetResults()或其他什么吗?

2 个答案:

答案 0 :(得分:1)

我遇到了windows / linux的行为差异,并通过windows和linux版本之间的以下修改解决了这个问题:

Windows上的

dbhandle <- odbcDriverConnect(paste("driver={SQL Server};server=", ...
linux上的

dbhandle <- odbcDriverConnect(paste("driver=SQLServer;server=", ...

区别在于声明驱动程序,有/无花括号以及SQLServer之间的空格

仍在寻找为什么的解释,但这有效...

答案 1 :(得分:0)

所以问题似乎是我在声明之前声明了变量,如下所示:

DECLARE @foobar CHAR(3) 'AAA';
SELECT TOP (5) id, name, desc FROM tbl WHERE code = @fooBar;

将其更改为:

SELECT TOP (5) id, name, desc FROM tbl WHERE code = 'AAA';

导致结果集出现在Linux和Windows中。我将调查究竟发生这种情况的原因。