0

我有一个 R 脚本,它从 Windows 上的 R 工作室的 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 中,我可以 View() 生成的数据帧。在 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()什么的吗?

4

2 回答 2

1

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

在窗户上:

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

在 Linux 上:

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

区别仅在于声明驱动程序,带/不带花括号以及 and 之间的SQL空格Server

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

于 2016-03-21T19:01:08.267 回答
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 上。我将调查究竟为什么会发生这种情况。

于 2014-10-15T13:30:44.830 回答